2015-09-09 41 views
3

我知道我可以做np.subtract.outer(x, x)。如果x已经形状(n,),那么我最终得到一个形状为的阵列。不过,我有一个形状为(n, 3)x。我想输出形状为(n, n, 3)的东西。我该怎么做呢?也许np.einsum如何计算numpy中的所有向量差异对?

回答

6

您可以None/np.newaxis扩展方面,形成x三维数组版本,并从中减去原来的二维数组的版本,像这样使用后broadcasting -

x[:, np.newaxis, :] - x 

采样运行 -

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]]]) 
+1

嗯,这比我想象的要简单得多:) –