2

数値計算用の Python コードの一部として、幾分大きな (スパース) 行列 (~100x100) を何度も反転する必要があります。私は本当にプログラムをスピードアップしたいと思っています.私に提案された方法の1つは、行列反転ステップのためにCのサブルーチンを呼び出すことです.

このタスクに対して、効率的で十分にテストされた、推奨される C ルーチンはありますか?

ありがとうございました。

4

1 に答える 1

2
>>> from numpy import *
>>> from numpy.linalg import inv
>>> from scipy.sparse import csr_matrix
>>> m = matrix([[3,1,5],[1,0,8],[2,1,4]])
>>> s = csr_matrix(m)
>>> invs = inv(a) # Inverse sparse matrix
>>> dot(a,inva) # Check the result, should be eye(3) within machine precision
csr_matrix([[ 1.00000000e-00, 2.77555756e-17, 3.60822483e-16],
           [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00],
           [ -1.11022302e-16, 0.00000000e+00, 1.00000000e+00]])

それは本当にあなたが必要とする逆ですか?反転せずに目標を達成できる場合があります。

本当に逆が必要なケースはまれです。さらに、スパース行列の逆行列は必ずしもスパースではありません。通常、反転は LU 因数分解よりもコストがかかり、丸め誤差が発生しやすくなります。

-- http://mail.scipy.org/pipermail/scipy-user/2007-October/013936.html

--> http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.factorized.html#scipy.sparse.linalg.factorized

于 2012-06-25T07:24:56.353 に答える