假设我有三个数组(即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来自哪里?对我来说看起来不是那么有道理。
答案 0 :(得分:3)
在两个阵列上操作时,NumPy会比较它们的形状 逐元素。它从尾随尺寸开始,并起作用 前进的方向。当两个维度相等或一个维度兼容时,它们是兼容的 他们是1.
两个轴中较小的一个被拉伸或“复制”以匹配 另一个。
此处正在应用Numpy的 broadcasting 规则。
w (1d array): 113
X (2d array): 113 x 1
Result (2d array): 113 x 113
答案 1 :(得分: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]])