本文转载自:【python - numpy矩阵乘法返回nan】

异常

我有两个二维矩阵,并且我想将这两个矩阵相乘以获得一个新的矩阵。第一个矩阵A的尺寸为943 x 1682,如下所示:

[[ 5.  3.  4. ...,  0.  0.  0.]
 [ 4.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 ..., 
 [ 5.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  5.  0. ...,  0.  0.  0.]]

另一个矩阵B的尺寸为1682 x 20,如下所示:

[[ 0.          0.          0.         ...,  0.          0.          3.        ]
 [ 0.          0.57735027  0.57735027 ...,  0.          0.          3.        ]
 [ 0.          0.          0.         ...,  0.          0.          1.        ]
 ..., 
 [ 0.          0.          0.         ...,  0.          0.          2.        ]
 [ 0.          0.          0.         ...,  0.          0.          1.        ]
 [ 0.          0.          0.         ...,  0.          0.          1.        ]]

但是,当我尝试A.dot(B)或np.matmul(A,B)时,我得到了一个新的矩阵,其值均为nan,如下所示:

[[ nan  nan  nan ...,  nan  nan  nan]
 [ nan  nan  nan ...,  nan  nan  nan]
 [ nan  nan  nan ...,  nan  nan  nan]
..., 
 [ nan  nan  nan ...,  nan  nan  nan]
 [ nan  nan  nan ...,  nan  nan  nan]
 [ nan  nan  nan ...,  nan  nan  nan]]

我认为这可能是乘以0的结果。但是为什么它会在每个位置返回nan?我应该如何处理,以便我可以得到数字而不是nan?

非常感谢您的帮助!


最佳答案

第一个矩阵中的单个nan列和/或第二个矩阵中的单个nan行,可能会导致此问题。验证所有值在两个矩阵中均有效的一种方法是过滤nan并查看形状是否保持不变:

a_shape_before = A.shape
a_shape_after = A[numpy.logical_not(numpy.is_nan(A))].shape
assert a_shape_before == a_shape_after

对于B同样如此。

补充

关于python - numpy矩阵乘法返回nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43563511/