Matlab 矩阵乘法忽略 nans?

标签 matlab matrix nan

我有两个矩阵 AB 我想将它们相乘,但它们包含 nan

默认乘法将 nan 放在结果的整个列中,其中数据中甚至有一个 nan。我想忽略它们,例如 nansum/nanmean 等。换句话说,不是计算

 sum( A(i,j) * B(j,k) )

我希望它使用 nansum

我想这可以通过将 nan 替换为 0,然后相乘来实现,但是使用 nansum 的目的是为了避免这种情况,对吧?

最佳答案

乘法产生 NaN 的原因是没有一种真正的方法可以处理它们。如果,在你的情况下,它们应该被零替换,那么写起来最简单

A(isnan(A)) = 0;

在运行乘法之前。我建议不要重写矩阵乘法,因为您不会从自己的代码中获得与内置矩阵代数相似的性能。

nansum,特别是 nanmean 等是统计工具箱的函数,其中 NaN 不是简单地替换为零,而是实际上被删除从计算来看,因为在统计上下文中,NaN 用于指示缺失的数据点。那里没有 nanmult,因为在统计学中,您通常不会进行矩阵乘法,如果您这样做(例如在回归中),向量中缺少单个观察值通常意味着您无论如何,我都想扔掉整行/整列。

关于Matlab 矩阵乘法忽略 nans?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178843/

相关文章:

math - 给定 A 和 B 的 Trace(AB^{-1}) 的有效计算

python - 如何将numpy数组转换为Matlab矩阵?

对称矩阵的 C++ 容器和 == 运算符

r - 规模转化产生的NaN

Javascript 在 Firefox 中工作正常,但在 Chrome 中给出 NaN

c++ - 如何让所有平台编译器为 NaN 输出相同的字符串?

matlab - Matlab 中的结构到单元格(或矩阵)

windows - 文本 'Extent' 属性不包含正确的大小

matlab - 在Matlab中执行系统命令,无需等待

matlab - 使用矢量化求解多个线性系统