【发布时间】:2016-04-09 00:33:20
【问题描述】:
假设我们要计算一个矩阵和一个列向量的点积:
所以我们开始使用 Numpy/Python:
a=numpy.asarray([[1,2,3], [4,5,6], [7,8,9]])
b=numpy.asarray([[2],[1],[3]])
a.dot(b)
结果:
数组([[13], [31], [49]])
到目前为止,一切都很好,但是为什么这也有效?
b=numpy.asarray([2,1,3])
a.dot(b)
结果:
数组([13, 31, 49])
我希望 [2,1,3] 是一个行向量(需要转置来应用点积),但 Numpy 似乎默认将数组视为列向量(在矩阵乘法的情况)?
这是如何工作的?
编辑:
为什么是:
b=numpy.asarray([2,1,3])
b.transpose()==b
所以矩阵点向量数组确实可以工作(因此它会将其视为列向量),但是其他操作(转置)不起作用。这不是真正一致的设计,不是吗?
【问题讨论】:
-
array([2, 1, 3])不是行向量或列向量。它只是一个向量。 -
@user2357112 你应该称它为向量吗?我认为这是这种常见混淆的主要来源。人们通常通过“向量”来指代
[n x 1]或[1 x n]对象。但正如我所看到的,关键在于 1dndarray具有一维,所以我会说它不是向量,而是数组。 (当然,有一些特殊的 nd 数组可以被认为是向量或矩阵,即n==2:) -
`[[1,2,3]]`会发生什么?
标签: python numpy array-broadcasting