【问题标题】:Numpy matrix multiplication returns nanNumpy 矩阵乘法返回 nan
【发布时间】:2017-09-19 16:25:14
【问题描述】:

我有两个二维矩阵,我想将这两个矩阵相乘得到一个新矩阵。第一个矩阵 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?

非常感谢您的帮助!

【问题讨论】:

  • 如果您尝试将矩阵减少到重现问题的最小可能版本,这可能会有所帮助(那么您很可能也找到了解决方案......)。没有打印出来的部分有nans吗?
  • @hiroprotagonist 不幸的是,这些是简化的矩阵。我想我找到了一些nan s。那么在我将所有 nan 转换为 0 后它会起作用吗?
  • 我不能保证这会给出正确/期望的结果,但是 nans 应该会消失。并且减少我的意思是:尝试找到重现您的问题的最小矩阵(它们不需要有任何意义)(即导致点积下的nans)。

标签: python arrays numpy matrix vector


【解决方案1】:

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

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 也是如此。

【讨论】:

  • 谢谢。 a_shape_after 返回 (31920,),这是否意味着从 31920
  • 是的。 A 中的单个 nan 列可能会导致此问题。使用numpy.argwhere(numpy.isnan(A)) 查找矩阵中nans 的索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2015-01-07
  • 2017-03-04
  • 2012-05-27
相关资源
最近更新 更多