我有两个矩阵A
,B
我想将它们相乘,但它们包含nan
s。
默认的乘法将nan
结果的整个列放下,其中nan
数据中甚至有一个。我想忽略它们,就像nansum
/ nanmean
etc 一样。换句话说,而不是计算
sum( A(i,j) * B(j,k) )
我希望它使用nansum
。
我想这可以通过替换nan
为0
,然后相乘来实现,但是这样做的nansum
目的是避免这种情况,对吗?
乘法导致NaN
s 的原因是没有一种真正的方法可以处理它们。如果在您的情况下,它们应该被零替换,那么最容易编写
A(isnan(A)) = 0;
在运行乘法之前。我建议不要重写矩阵乘法,因为您不会从自己的代码中获得与内置矩阵代数相似的性能。
nansum
,特别是nanmean
etc 是统计工具箱的功能,其中NaN
s 不是简单地被零替换,而是实际上从计算中删除,因为在统计的上下文中,NaN
用于指示丢失的数据点。那里没有nanmult
,因为在统计学中,你不经常矩阵乘法,如果你这样做(例如在回归中),向量中缺少一个观察值通常意味着你会想要扔掉整个无论如何,行/列。
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])