Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略nans的Matlab矩阵乘法?_Matlab_Matrix_Nan - Fatal编程技术网

忽略nans的Matlab矩阵乘法?

忽略nans的Matlab矩阵乘法?,matlab,matrix,nan,Matlab,Matrix,Nan,我有两个矩阵A和B,我想把它们相乘,但它们包含nans 默认乘法将nan放入结果的整个列,其中数据中甚至只有一个nan。我想忽略它们,比如nansum/nanmean等等。换言之,不是计算 sum( A(i,j) * B(j,k) ) 我想让它使用nansum 我想用0替换nan,然后进行乘法是可能的,但拥有nansum的目的是为了避免这种情况,对吗?乘法产生nan的原因是没有一种真正的方法来处理它们。如果,在您的情况下,它们应该被零替换,那么最容易编写 A(isnan(A)) = 0;

我有两个矩阵
A
B
,我想把它们相乘,但它们包含
nan
s

默认乘法将
nan
放入结果的整个列,其中数据中甚至只有一个
nan
。我想忽略它们,比如
nansum
/
nanmean
等等。换言之,不是计算

 sum( A(i,j) * B(j,k) )
我想让它使用
nansum


我想用
0
替换
nan
,然后进行乘法是可能的,但拥有
nansum
的目的是为了避免这种情况,对吗?

乘法产生
nan
的原因是没有一种真正的方法来处理它们。如果,在您的情况下,它们应该被零替换,那么最容易编写

A(isnan(A)) = 0;
在运行乘法运算之前。我建议不要重新编写矩阵乘法,因为从自己的代码中不会获得与内置矩阵代数类似的性能


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

1:如果替换<代码>楠S,但是,我会考虑在乘以矩阵之后替换它们。这至少允许识别结果中不依赖缺失值的元素。再说一遍,这完全取决于一个人想要实现什么;忽略nan是一种具体情况的需要。我正试图用
eig(nancov(X))
乘以
X
来用PCA估计矩阵,除了
X
包含缺失值。我认为在这种情况下,
nan-->0
是有意义的?
python
在问题中没有被标记。可以解释为什么您的解决方案能够提高您的贡献值吗?矩阵乘法的基本思想是将矩阵A[sza[0],sza[1]]的行与B[szb[0],szb[1]]的列的乘积相加,其中sza[1]=szb[0]. 在我的嵌套循环格式中,我为A的每一行遍历B的每一列。我找到了乘积,并且只对产生实数的乘积求和(例如1*nan=nan,因此这将被忽略且不会被添加)。我在矩阵c中输入了已经在适当维度中定义的和(sza[0],szb[1])。
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])