如何计算numpy中的所有矢量差异对?

Nei*_*l G 4 numpy python-3.x numpy-einsum

我知道我能做到np.subtract.outer(x, x).如果x有形状(n,),那么我最终得到一个有形状的数组(n, n).但是,我有一个x形状(n, 3).我想输出有形状的东西(n, n, 3).我该怎么做呢?也许np.einsum

Div*_*kar 8

您可以broadcasting在使用None/np.newaxis扩展尺寸后使用以形成3D阵列版本x并从中减去原始2D阵列版本,如下所示 -

x[:, np.newaxis, :] - x
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [6]: x
Out[6]: 
array([[6, 5, 3],
       [4, 3, 5],
       [0, 6, 7],
       [8, 4, 1]])

In [7]: x[:,None,:] - x
Out[7]: 
array([[[ 0,  0,  0],
        [ 2,  2, -2],
        [ 6, -1, -4],
        [-2,  1,  2]],

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

       [[-6,  1,  4],
        [-4,  3,  2],
        [ 0,  0,  0],
        [-8,  2,  6]],

       [[ 2, -1, -2],
        [ 4,  1, -4],
        [ 8, -2, -6],
        [ 0,  0,  0]]])
Run Code Online (Sandbox Code Playgroud)