2017-02-26 102 views
3

我試圖創建一個三維陣列,Tusing numpy的定義如下:高效陣列創建在numpy的

T_ {I,J,K} = \ delta_ {I,K} - \增量{Ĵ, k}

其中\ delta_ {i,j}是Kronecker delta函數(當i = j時爲1,否則爲0)。我想知道用numpy做這個最有效的方法。我可以使用for循環創建兩個三維數組並將其減去。但我懷疑有一種更快更自然的方法。非常感激任何的幫助。

回答

6

相當於delta是在numpy的eye

delta = numpy.eye(5) 
T = delta[:,None,:] - delta[None,:,:] 

None創建<虛擬>尺寸(不帶任何附加存儲器)用於在numpy的廣播。

+0

太棒了!只是這樣我才能更好地理解這一點。假設我只想爲所有j創建一個由X_ {i,j,k} = X_ {i,k}定義的三維數組X.上面的第一項似乎沒有這樣做,因爲第一維必須有長度。我會怎麼做? – stableMatch

+0

@gzc是的,我認爲有一個錯字。我們想要的是delta [:,None,:] - delta [無,:,:] – stableMatch

+0

@gzc:已更正。 – Daniel