2016-07-18 88 views
2

我想向量化的N x N陣列以下三重積操作如下稱爲p矢量化NumPy的三重積

for j in range(len(p)): 
    for k in range(len(p)): 
     for l in range(len(p)): 
      h[j, k, l] = p[j, k] * p[k, l] * p[l, j] - p[j, l] * p[l, k] * p[k, j] 

我想numpy.einsum應該使用在這裏,儘管我不是實際上總結了重複的指標,但我一直無法將其歸結。思考?

回答

4

簡單地移植在這些循環迭代器作爲串符號,我們將有像這樣的einsum基礎的解決方案 -

h = np.einsum('jk,kl,lj->jkl',p,p,p) - np.einsum('jl,lk,kj->jkl',p,p,p) 

作爲基本的擴展相關的問題(因爲我們沒有減少任何軸),我們可以簡單使用NumPy broadcasting也通過引入在不同的地方有None/np.newaxis新的座標軸,以允許擴展,像這樣 -

h = p[...,None]*p*p[:,None,:].T - p[:,None,:]*p.T*p.T[...,None] 
+0

好了,現在我覺得挺傻的。 – NPMitchell