2

假设我有三个数组(即 type numpy.array):

>>> w.shape
(113,)
>>> X.shape
(113,1)
>>> Y.shape
(113,)

numpy 帮助页面建议在数组上每个乘法都是元素方面的。由于上述三个向量在第一维中的大小为 113,我认为在所有情况下乘法都会给出一个 113 长度的向量,但事实并非如此:

>>> (w * Y).shape     # expected
(113,)
>>> (w * X).shape     # ?!?!?!?!
(113,113)

第二轴的113是哪里来的?对我来说看起来并不那么明智。

4

2 回答 2

3

当对两个数组进行操作时,NumPy 会逐元素比较它们的形状。它从尾随维度开始,然后向前推进。当两个维度相等或其中之一为 1 时,它们是兼容的。

两个轴中较小的一个被拉伸或“复制”以匹配另一个。

Numpy 的广播规则正在这里应用。

w      (1d array):       113
X      (2d array): 113 x   1   
Result (2d array): 113 x 113
于 2012-11-08T11:42:26.537 回答
0

查看正在发生的事情的最简单方法是举个例子:

w = array([5,6])
x = array([[1,2],[3,4]])
z = array([[5,6]])

w*x
# array([[ 5, 12],
#        [15, 24]])

w*z
# array([[25, 36]])
于 2012-11-08T11:48:43.413 回答