用pandas函数代替下列语句:def RMSE_MAPE(ydata,y_hatdata,indexlist): y=[] y_hat=[] for i in indexlist: y.append(ydata.iat[i,0]) y.append(ydata.iat[i,1]) y.append(ydata.iat[i,2]) y_hat.append(y_hatdata.iat[i,0]) y_hat.append(y_hatdata.iat[i,1]) y_hat.append(y_hatdata.iat[i,2]) x1=0 for i in range(len(indexlist)): x1=x1+np.square(y[i] - y_hat[i]) x2=0 for i in range(len(indexlist)): x2=x2+np.abs((y[i] - y_hat[i]) / y[i]) RMSE = np.sqrt(x1/len(indexlist)) MAPE = x2*100/len(indexlist) print('RMSE:'+str(RMSE)+' MAPE:'+str(MAPE)) return
时间: 2023-06-10 07:02:45 浏览: 82
可以使用以下代码来代替原有的代码段:
import pandas as pd
import numpy as np
def RMSE_MAPE(ydata, y_hatdata, indexlist):
df = pd.DataFrame(ydata.iloc[indexlist])
df_hat = pd.DataFrame(y_hatdata.iloc[indexlist])
y = df.stack().to_list()
y_hat = df_hat.stack().to_list()
x1 = np.sum((np.array(y) - np.array(y_hat)) ** 2)
x2 = np.sum(np.abs((np.array(y) - np.array(y_hat)) / np.array(y))) * 100
RMSE = np.sqrt(x1 / (3 * len(indexlist)))
MAPE = x2 / (3 * len(indexlist))
print('RMSE:', RMSE, ', MAPE:', MAPE)
return RMSE, MAPE
此代码使用 pandas 将原始数据转化为数据框,使用 stack() 函数将数据从宽格式转换为长格式,并使用 to_list() 函数将数据解析为普通列表。同时使用 numpy 的 sum() 函数对 x1 和 x2 进行计算。最后计算 RMSE 和 MAPE,并返回这两个值。
阅读全文