我有两个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的结果。但为什么它会在每个位置都返回?我应该如何处理这个问题,以便我可以得到数字而不是纳米?
非常感谢您的帮助!
答案 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。