【发布时间】:2013-03-25 15:16:55
【问题描述】:
我对意外使用两个 numpy 矩阵(后来修复)执行的操作的结果有疑问。
假设我有一个列向量 A = [1,2,3] 和一个行向量 B = [1,1,1]。据我所知,没有正确的数学方法可以“减去”这两个向量,即这应该是一个未定义的操作。然而,当我这样做时,我又回来了:
>>> matrix([[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
我以为这可能是某种广播操作,但这仍然让我有些困扰。 numpy.matrix 对象不应该只包含数学上有效的矩阵运算吗?
感谢任何帮助!
谢谢!
【问题讨论】:
-
知道会很有趣。
-
谷歌“numpy 广播”
-
@user1149913 我认为问题不在于广播是如何工作的,而在于为什么允许一行与列向量相加/减去?另外,请记住,
np.matrix的广播规则与np.ndarray的广播规则大不相同。 -
@askewchan
matrix子类ndarray,它们遵循完全相同的广播规则。主要区别在于__getitem__方法,它确保始终保留2D 对象,而__mul__调用.dot而不是np.multiply。 The source is pure Python 易于理解。 -
不鼓励使用
np.matrix,部分原因是这种不一致的行为。如果您一直使用 1Dndarray,则不会意外得到 2D 数组。对于np.ndarray,广播是一个定义明确的操作,同样的规则也适用于它的matrix子类,即使它不是你对“数学矩阵”的期望。