我有 2 个 numpy 数组 a 和 b 如下:
a = np.random.randint(0,10,(3,2))
Out[124]:
array([[0, 2],
[6, 8],
[0, 4]])
b = np.random.randint(0,10,(2,2))
Out[125]:
array([[5, 9],
[2, 4]])
Run Code Online (Sandbox Code Playgroud)
我想从 a 中的每一行中减去 b 中的每一行,所需的输出形状为(3,2,2):
array([[[-5, -7], [-2, -2]],
[[ 1, -1], [ 4, 4]],
[[-5, -5], [-2, 0]]])
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法来做到这一点:
print(np.c_[(a - b[0]),(a - b[1])].reshape(3,2,2))
Run Code Online (Sandbox Code Playgroud)
但我需要一个完全矢量化的解决方案或内置的 numpy 函数来执行此操作。
只需使用np.newaxis(它只是 None 的别名)向 a 添加一个单例维度,然后让广播完成其余的工作:
In [45]: a[:, np.newaxis] - b
Out[45]:
array([[[-5, -7],
[-2, -2]],
[[ 1, -1],
[ 4, 4]],
[[-5, -5],
[-2, 0]]])
Run Code Online (Sandbox Code Playgroud)