Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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
Python Numpy矩阵乘法返回nan_Python_Arrays_Numpy_Matrix_Vector - Fatal编程技术网

Python Numpy矩阵乘法返回nan

Python Numpy矩阵乘法返回nan,python,arrays,numpy,matrix,vector,Python,Arrays,Numpy,Matrix,Vector,我有两个二维矩阵,我想把这两个矩阵相乘,得到一个新的矩阵。第一个矩阵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.

我有两个二维矩阵,我想把这两个矩阵相乘,得到一个新的矩阵。第一个矩阵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.]]
[[ 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.        ]]
[[ 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]]
另一个矩阵B的尺寸为1682 x 20,如下所示:

[[ 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.]]
[[ 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.        ]]
[[ 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]]
但是,当我尝试A.dot(B)或np.matmul(A,B)时,我得到了一个新的矩阵,其值均为nan,如下所示:

[[ 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.]]
[[ 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.        ]]
[[ 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
s并查看形状是否保持不变:

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.

来说,如果您试图将矩阵简化为再现问题的最小可能版本,则可能会有所帮助(那么您可能也找到了解决方案……)。在未打印的部分中是否存在
nan
s?@hiroprogator不幸的是,这些是简化矩阵。我想我找到了一些
nan
s。那么,在我将所有的
nan
s转换为
0
之后,它会工作吗?我不能保证这会给出正确的/期望的结果,但是
nan
s应该会消失。对于reduced,我的意思是:尝试找到最小的矩阵(它们不需要有任何意义)来重现您的问题(即,在点积下产生
nan
s)。谢谢。返回(31920,)后的形状是否意味着矩阵中存在一些nan,因为31920<1682*20?是的。A中的单个
nan
列可能导致此问题。使用
numpy.argwhere(numpy.isnan(A))
查找矩阵中
nan
s的索引。