我是使用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

Python-3.x相关问答推荐

Python-Django 设置 Pandas DataFrame 的多索引不会分组/合并最后一个索引

在不使用 split 函数的情况下从字符串中分割逗号(','),句号('.')和空格(' '),将字符串的单词附加到列表中

它们是否同样存储在python3的内存中?

从列表的元素和python中的多个多索引数据帧执行方程

如何使用 Selenium 和 Python 作为线程来使用事件(Chrome-Developer-Tools)?

将 pandas Timestamp() 转换为 datetime.datetime() 以支持 peewee DateTimeField()

如何在 Telethon 中向机器人发送发送表情符号

位对的距离

如何计算Pandas 列中每列唯一项目的出现次数?

正则表达式来识别用 Python 写成单词的数字?

spinbutton调整up/down箭头

如何注释一个以另一个函数作为参数的函数?

Generic[T] 基类 - 如何从实例中获取 T 的类型?

Python:遍历子列表

全局捕获快速 api 中的异常

Python 3 与 Python 2 映射行为

使用 Tensorflow 2.0 在 MNIST 上实现自定义神经网络?

每次启动 Google Colab 时都必须安装所需的软件包吗?

命名参数可以与 Python 枚举一起使用吗?

无法解码 Python Web 请求