Numpy矩阵乘法返回nan

时间:2017-04-22 19:10:24

标签: python arrays numpy matrix vector

我有两个2-D矩阵,我想将这两个矩阵相乘得到一个新的矩阵。第一个矩阵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的结果。但为什么它会在每个位置都返回?我应该如何处理这个问题,以便我可以得到数字而不是纳米?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

第一个矩阵中的单个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。

相关问题