2012-02-10 4 views
1

nx3x3アレイ(マルチバンド画像の行)にnumpy.linalg.detまたはnumpy.linalg.invを使用する方法はありますか?今私は次のようなことをしています:多目的アレイ上のナンプル

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

確かにより効率的な方法があります。

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

その他のより直接的な方法:もちろん、私はmapを使用することができますか?

答えて

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のラインがあります(3x3マトリックスで表されます)。 n 2d行列があります。 – Benjamin

+0

私が言ったように、あなたの現在の方法を改善することはあまりないと思います。彼はよりメモリ効率的な方法を提案したスヴェンの答えを参照してください。 – yurib