这是一个相当简单的问题,但我似乎无法找到答案。考虑两个简单的数组:
import numpy as np
a = np.random.uniform(0., 1., (2, 1000))
b = np.random.uniform(0., 1., (2,))
我想执行操作a - b
,以便最终数组为([[a[0] - b[0], a[1] - b[1]])
并且我得到
ValueError: operands could not be broadcast together with shapes (2,1000) (2,)
如何执行此(或其他)操作?
答案 0 :(得分:2)
在两个阵列上操作时,NumPy会比较它们的形状 逐元素。它从尾随尺寸开始,并起作用 前进的方向。
时兼容两个维度
- 他们是平等的,或
- 其中一个是1
醇>
错误是因为a
(1000)和b
(2)的最后一个维度无法广播;您可以将b
转换为形状(2, 1)
的二维数组,以便1
- > (可以广播到)1000
,2
- > (可以广播到)2
:
a - b[:,None]
#array([[ 0.06475683, -0.43773571, -0.62561564, ..., 0.05205518,
# -0.1209487 , 0.16334639],
# [ 0.58443617, 0.28764136, 0.75789299, ..., 0.18159133,
# 0.28548633, -0.12037869]])
或
a - b.reshape(2,1)