2015-09-09 37 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

嗯,這比我想象的要簡單得多:) –