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]])