我有两个矩阵 A
和 B
我想将它们相乘,但它们包含 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/