Python numpy数组乘法问题

Python numpy数组乘法问题,python,arrays,numpy,Python,Arrays,Numpy,假设我有三个数组(即类型为numpy.array): numpy帮助页面表明,在数组上,每个乘法都是按元素进行的。由于上述三个向量在第一维度的大小都是113,我认为乘法在所有情况下都会得到113长度的向量,但它不是: >>> (w * Y).shape # expected (113,) >>> (w * X).shape # ?!?!?!?! (113,113) 第二个轴上的113从哪里来?在我看来不是很明智 在两个阵列上操作时,NumPy

假设我有三个数组(即类型为
numpy.array
):

numpy帮助页面表明,在数组上,每个乘法都是按元素进行的。由于上述三个向量在第一维度的大小都是113,我认为乘法在所有情况下都会得到113长度的向量,但它不是:

>>> (w * Y).shape     # expected
(113,)
>>> (w * X).shape     # ?!?!?!?!
(113,113)
第二个轴上的113从哪里来?在我看来不是很明智

在两个阵列上操作时,NumPy会比较它们的形状 元素方面。它从后面的尺寸标注开始,然后开始工作 前进的道路。当两个维度相等或一个维度相等时,它们是兼容的 其中有1个

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

Numpy的规则正在这里应用

w      (1d array):       113
X      (2d array): 113 x   1   
Result (2d array): 113 x 113

查看发生了什么的最简单方法是使用一个示例:

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]])
啊哈,“从尾随尺寸开始”!谢谢。如果您想要一个
(N,1)
结果,将
x(N,)
y(N,1)
相乘,请使用
x[:,None]*y
强制广播。
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]])