2012-02-10 169 views
1

有沒有辦法在nx3x3陣列(多頻帶圖像中的一行)上使用numpy.linalg.detnumpy.linalg.inv?現在我正在做類似:多維數組陣列上的Numpy linalg

det = numpy.array([numpy.linalg.det(i) for i in X]) 

但肯定有一種更有效的方法。當然,我可以用map

det = numpy.array(map(numpy.linalg.det, X)) 

還有其他更直接的方法嗎?

回答

3

我敢肯定,沒有比您擁有的效率更高的方法。您可以先創建結果的空數組和直接寫入所有結果到陣列節省一些內存:

res = numpy.empty_like(X) 
for i, A in enumerate(X): 
    res[i] = numpy.linalg.inv(A) 

這會不會是任何更快,但 - 它只會使用較少的內存。

1

一個「正常」決定因素只爲一個矩陣(維度= 2)定義,所以如果這就是你想要我沒有看到另一種方式。

如果真要計算一個立方體的決定因素,那麼你可以嘗試實施在此描述的方法之一: http://en.wikipedia.org/wiki/Hyperdeterminant

的通知,這是不一定相同的值,你現在是我的唯一計算。

+0

在9波段圖像中有長度爲n的線(用3×3矩陣表示)。有n個2d矩陣。 – Benjamin 2012-02-10 15:20:50

+0

然後,正如我所說的,我認爲你現在的方法沒有多大改進。看到斯文的回答,他建議更有效的記憶方式。 – yurib 2012-02-10 15:28:42