Matlab矩阵乘法忽略了nans?

时间:2013-01-06 02:57:53

标签: matlab matrix nan

我有两个矩阵AB我希望它们相乘,但它们包含nan个。

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

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

我希望它使用nansum

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

2 个答案:

答案 0 :(得分:5)

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

A(isnan(A)) = 0;

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

nansum,尤其是nanmean等是统计工具箱的功能,其中NaN不是简单地被零替换,而是实际从计算中删除,因为在上下文中统计信息NaN用于指示缺少的数据点。那里没有nanmult,因为在统计学中,你不经常矩阵乘法,如果你这样做(例如在回归中),从向量中缺少一个观察通常意味着你需要无论如何,扔出整个行/列。

答案 1 :(得分:0)

import numpy as np

#find the dimensions of your arrays
sza=a.shape
szb=b.shape

#calculate by using nested loops rows of 'a' times columns of 'b'
c=np.zeros(sza[0],szb[1])
for i in range(0, sza[0]):
  for k in range(0, szb[1]):
    c[i, k]=np.nansum(a[i, ]*b[:, k])