Numpy:按行减去 2 个 numpy 数组

All*_*len 3 python numpy

我有 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 函数来执行此操作。

DSM*_*DSM 5

只需使用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)