我想通过简单地沿第一个轴执行相同的加法来添加两个具有不同尺寸的数组。
非矢量化解决方案:
x = np.array([[[1,2],[3,4],[5,6]],[[7,8],[9,0],[1,2]],[[3,4],[5,6],[7,8]],[[9,0],[1,2],[3,4]]]) #shape (4,3,2)
y = np.array([[1,2],[3,4],[5,6]]) #shape (3,2)
ans = np.empty(x.shape)
for i in range(x.shape[0]):
ans[i] = x[i] + y
print(ans) #shape (4,3,2)
如何适当播放此广播?
答案 0 :(得分:3)
由于broadcasting [numpy-doc],您可以简单地使用:
x + y
因此,这里我们将索引 i,j,k 处的元素计算为:
x ijk + y jk
这给出了:
>>> x + y
array([[[ 2, 4],
[ 6, 8],
[10, 12]],
[[ 8, 10],
[12, 4],
[ 6, 8]],
[[ 4, 6],
[ 8, 10],
[12, 14]],
[[10, 2],
[ 4, 6],
[ 8, 10]]])
>>> (x + y).shape
(4, 3, 2)
如果将两个数组加在一起,例如第一个数组具有三个维度,第二个数组具有两个维度,而第一个左边数组的最后两个维度等于右边数组的维度,则右边的数组一边是“广播”。这意味着它被视为三维数组,其中每个子数组都等于右侧的数组。
您可以在this answer等任意位置为y
“引入”额外的尺寸,以“广播”特定尺寸。