我是使用Python代码的初学者,当两个矩阵包含NAN值时,我在计算它们的RMSE时遇到了问题.
例如,我有两个矩阵,其中包括几个具有NAN值的列.如何计算每列的RMSE值?
X=具有形状(1500,27)的ndarray,y=具有形状(1500,27)的ndarray
任何帮助都将不胜感激.
我试着计算它,但每次都得到NAN值.因此,任何帮助都将不胜感激.
我是使用Python代码的初学者,当两个矩阵包含NAN值时,我在计算它们的RMSE时遇到了问题.
例如,我有两个矩阵,其中包括几个具有NAN值的列.如何计算每列的RMSE值?
X=具有形状(1500,27)的ndarray,y=具有形状(1500,27)的ndarray
任何帮助都将不胜感激.
我试着计算它,但每次都得到NAN值.因此,任何帮助都将不胜感激.
你的ndarray很小.因此,只需遍历行和列并使用
import numpy as np
arr1 = np.array([[1, 2, 10, 50, -np.nan, 0, np.nan],[1, 2, 10, 30, -np.nan, 0, np.nan]])
arr2 = np.array([[5, 2, 10, 50, 10, 0, np.nan],[1, 2, 10, 50, -np.nan, 0, np.nan]])
for i in range(arr1.shape[0]):
rmse = 0
skipped_cells = 0
for j in range(arr1.shape[1]):
if np.isnan(arr1[i, j]) or np.isnan(arr2[i, j]):
skipped_cells += 1
continue
rmse += (arr1[i,j] - arr2[i,j])**2
print((rmse/(arr1.shape[1]-skipped_cells))**(1/2))
现在,如果您使用的是较大的数组,瓶颈是这一部分--请查找集合运算.简短地说.使用np.isnan
,然后应用np.where
将两个数组中的nan
替换为零.然后计算RMSE.最后,纠正这样一个事实,即有些价值观是错误的.即乘以一行长度的SQRT,并除以(np.sum(is_not_nan))**0.5