#!/usr/bin/env python # -*- coding: utf-8 -*- # time: 2024/9/23 15:27 # file: formula.py # author: David # company: shenyang JY import numpy as np class Formulas(object): def __init__(self, opt): self.opt = opt def calculate_acc(self, label_data, predict_data): loss = np.sum((label_data - predict_data) ** 2) / len(label_data) # mse loss_sqrt = np.sqrt(loss) # rmse loss_acc = (1 - loss_sqrt / self.opt.cap) * 100 return loss_acc def calculate_acc_south(self, label_data, predict_data): cap = 0.1 * self.opt.cap mask = (label_data < cap) & (predict_data < cap) label_data = label_data[~mask] predict_data = predict_data[~mask] diff = label_data - predict_data base = np.where(label_data < self.opt.cap * 0.2, self.opt.cap * 0.2, label_data) acc = np.sum((diff / base) ** 2) / len(diff) acc = (1 - np.sqrt(acc)) * 100 return acc def calculate_acc_northwest(self, label_data, predict_data): cap = 0.03 * self.opt.cap mask = (label_data < cap) & (predict_data < cap) label_data = label_data[~mask] predict_data = predict_data[~mask] diff = np.abs(label_data - predict_data) base1 = label_data + predict_data + 1e-9 base2 = np.sum(diff) + 1e-9 acc = (1 - 2 * np.sum(np.abs(label_data / base1 - 0.5) * diff / base2)) * 100 return acc def calculate_acc_northeast(self, label_data, predict_data): cap = 0.1 * self.opt.cap mask = (label_data < cap) & (predict_data < cap) label_data = label_data[~mask] predict_data = predict_data[~mask] diff = np.abs(predict_data - label_data) deviation = diff / np.abs(predict_data + 1e-9) acc = np.where(deviation >= 1, 1, deviation) acc = 1 - np.mean(acc) return acc if __name__ == '__main__': from config import myargparse args = myargparse(discription="场站端配置", add_help=False) opt = args.parse_args_and_yaml() formula = Formulas(opt)