当两个矩阵在 Python 代码中包含 Nan 值时计算 RMSE

Calculate RMSE in two matrix when they include Nan value in Python Code

提问人:pay mia 提问时间:10/25/2023 更新时间:10/28/2023 访问量:22

问:

我是使用 Python 代码的初学者,当两个矩阵包含 Nan 值时,我在计算两个矩阵中的 RMSE 时遇到了问题。

例如,我有两个矩阵,其中包括几列具有 Nan 值。如何计算每列的 RMSE 值?

X = 形状为 (1500, 27) 的 ndarray,y = 形状为 (1500, 27) 的 ndarray

任何帮助将不胜感激。

我试图计算它,但我每次都得到 Nan 值。因此,任何帮助将不胜感激。

python-3.x nan numpy-ndarray

评论

0赞 pay mia 10/25/2023
我不得不说,我知道如何删除每个矩阵中的 Nan 列,但我不想这样做。我想计算每 27 列的每个 RMSe 值。
0赞 sixtytrees 10/28/2023
请注意,代码已更改。您只需要考虑单元格。所以,我添加了not nanskipped_cells

答:

0赞 sixtytrees 10/25/2023 #1

你的 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))

现在,如果你正在使用更大的数组,而你的瓶颈就是这部分 - 寻找集合操作。简要。使用 ,然后应用在两个数组中用零替换。然后计算 rmse。最后,更正某些值为 nan 的事实。即乘以一行长度的 sqrt,然后除以np.isnannp.wherenan(np.sum(is_not_nan))**0.5