62

Pythonで逆行列を取得するにはどうすればよいですか? 私はそれを自分で実装しましたが、それは純粋な python であり、それを実行するためのより高速なモジュールがあると思います。

4

7 に答える 7

108

行列操作を行う場合は、 numpyを確認する必要があります。これは主に C で書かれたモジュールで、純粋な Python でプログラミングするよりもはるかに高速です。以下は、行列を反転し、他の行列操作を行う方法の例です。

from numpy import matrix
from numpy import linalg
A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix.
x = matrix( [[1],[2],[3]] )                  # Creates a matrix (like a column vector).
y = matrix( [[1,2,3]] )                      # Creates a matrix (like a row vector).
print A.T                                    # Transpose of A.
print A*x                                    # Matrix multiplication of A and x.
print A.I                                    # Inverse of A.
print linalg.solve(A, x)     # Solve the linear equation system.

arrayモジュールも参照してください。これは、1 つのデータ型のみを処理する必要がある場合に、はるかに効率的なリストの実装です。

于 2008-10-17T05:41:42.067 に答える
56

本当に行列を反転する必要があることを確認してください。これは不要な場合が多く、数値的に不安定になる可能性があります。ほとんどの人が行列を反転する方法を尋ねるとき、A が行列で x と b がベクトルである Ax = b を解く方法を本当に知りたがっています。方程式 Ax = b を x について直接解くコードを使用する方が、A の逆数を計算してから逆数に B を掛けるよりも効率的で正確です。多くの b の値について Ax = b を解く必要がある場合でも、それは良い考えではありません。複数の b 値について連立方程式を解く必要がある場合は、A のコレスキー分解を保存しますが、逆にしないでください。

その行列を逆にしないでください を参照してください。

于 2008-10-18T20:12:27.827 に答える
10

残念なことに、ここで再び繰り返される選択された行列は、特異であるか条件が悪いものです。

A = matrix( [[1,2,3],[11,12,13],[21,22,23]])

定義により、行列 A 自体を掛けたときの A の逆行列は、単位行列を与えなければなりません。高く評価されている説明で選択された A は、それを行いません。実際、反転を見るだけで、反転が正しく機能しなかったという手がかりが得られます。個々の項の大きさを見てください - それらは元の A 行列の項と比較して非常に大きいです...

行列の例を選ぶとき、人間が非常に多くの場合、特異な行列を選ぶことに成功することは注目に値します!

解決策に問題があったので、さらに調べました。ubuntu-kubuntu プラットフォームでは、debian パッケージ numpy にマトリックスと linalg サブパッケージがないため、numpy のインポートに加えて、scipy もインポートする必要があります。

A の対角項に十分に大きな係数 (たとえば 2) を掛けると、行列は特異またはほぼ特異ではなくなる可能性が高くなります。そう

A = matrix( [[2,2,3],[11,24,13],[21,22,46]])

は特異でもほぼ特異でもなく、この例では意味のある結果が得られます... 浮動小数点数を扱うときは、避けられない丸め誤差の影響に注意する必要があります。

于 2010-06-27T21:19:14.100 に答える
1

numpy が嫌いなら、RPy と R のローカル コピーを取り出して、代わりに使用してください。

(また、実際に行列を反転する必要があることを伝えるためにエコーします。たとえば、R では、linalg.solve と solve() 関数は、不要であるため、実際には完全な反転を行いません。)

于 2008-10-17T20:25:42.873 に答える