广播numpy差异到第三维

时间:2016-05-15 16:59:20

标签: python pandas numpy

设置

import numpy as np

A = np.array([[1, 2], [2, 3]])
B = np.array([[1, 1], [2, 2], [4, 3]])

A

array([[1, 2],
       [2, 3]])

B

array([[1, 1],
       [2, 2],
       [4, 3]])

我需要将A的第一行与B的每一行区分开来。如果我这样做:

A - B[0]

array([[0, 1],
       [1, 2]])

我只需要B的每一行。

非矢量化方法是:

np.array([A - B[i] for i in range(B.shape[0])])

array([[[ 0,  1],
        [ 1,  2]],

       [[-1,  0],
        [ 0,  1]],

       [[-3, -1],
        [-2,  0]]])

问题

获得相同的三维数组的矢量化方法是什么?如果能让它变得更容易,我可以使用pandas。

1 个答案:

答案 0 :(得分:3)

最简单的方法是为B numpy数组添加维度,以便正确地广播它:

In [15]: A - B[:, np.newaxis]
Out[15]:
array([[[ 0,  1],
        [ 1,  2]],

       [[-1,  0],
        [ 0,  1]],

       [[-3, -1],
        [-2,  0]]])