numpyの行列反転の複雑さ


11

密な正方行列を反転する必要がある微分方程式を解いています。この行列の反転は計算時間のほとんどを消費するため、利用可能な最速のアルゴリズムを使用しているかどうか疑問に思っていました。

私の現在の選択はnumpy.linalg.invです。数値から、でスケーリングされることがわかります。ここで、nは行数であるため、方法はガウス消去法のようです。O(n3)

ウィキペディアによると、利用可能なより高速なアルゴリズムがあります。これらを実装するライブラリがあるかどうか誰もが知っていますか?

なぜこれらの高速アルゴリズムをnumpyが使用しないのでしょうか?


前に行列を実行する必要があります。Scipyを見てください。あなたの助けのためにスパース。必要な多くのツールが含まれています。
トバル

@Tobalは私が従うかどうかわからない...どのようにマトリックスを「実行」しますか?正確にどのようにscipy.sparse役立ちますか?
GoHokies

@GoHokies scipyはnumpyを補完します。密/疎行列は、計算を行う前に実装する必要があり、計算が改善されます。このdocs.scipy.org/doc/scipy/reference/sparse.htmlを読んでください。それは私の英語が下手で私よりもうまく説明しています。
トバル

@Tobal質問は具体的には密な行列を指しているので、scipy.sparseここでどのように関連するのかわかりませんか?
クリスチャンクラソン

2
@Tobal-私はまだ理解していないと思う。「行列を事前に作成する」とはどういう意味ですか?「計算を行う前に行列を実装する必要があります」あなたの最後のコメントに関して、あなたは確かに疎行列と密行列に使用できるテクニックが非常に異なることに同意するでしょう。
ヴォルフガングバンガース

回答:


20

(これはコメントするには長すぎます...)

n

  1. OnC1n3C2n2.xn

  2. 数字の束を掛ける:しかし、これは実際にははるかに真からである-複雑さは、すべての(算術)操作は同じ時間がかかることを前提として同じ番号はるかに速く、同じ量の乗算よりも異なる数字を。これは、現在のコンピューティングの主なボトルネックが、データの実際の算術演算ではなく、データをキャッシュに入れることであるためです。したがって、最初の状況(キャッシュ対応と呼ばれる)に再配置できるアルゴリズムは、これが不可能なアルゴリズムよりもはるかに高速になります。(これは、たとえばStrassenアルゴリズムの場合です。)

また、数値安定性は少なくともパフォーマンスと同じくらい重要です。ここでも、通常は標準的なアプローチが優先されます。

O(n3)O(n2.x)


A1bAx=bnumpy.linalg.solvexAA1A


特に、理論速度と実際の速度の間に大きな違いをもたらす詳細(大きなO表記の定数)で悪魔を指摘してくれてありがとう。
貪欲な

「逆はめったに必要ない」という部分をもっと強調すべきだと思います。目的が微分方程式系を解くことである場合、完全な逆関数が必要になる可能性は低いようです。
ジャレッドゴーゲン

@o_oまあ、それは私の最初の元のコメントでした(それらをすべて1つの回答にまとめた後に削除しました)。しかし、サイト(および後の読者)の利益のために、たとえ背後にXYの問題があるとしても、答えは質問の実際の質問(合理的で話題になっている)に答えるべきだと思いました。また、私は...あまりにも諭す音にしたくなかった
クリスチャンClason

1
n

1
A

4

おそらく、numpyソースコードの奥深くに埋められていることに注意する必要があります(https://github.com/numpy/numpy/blob/master/numpy/linalg/umath_linalg.c.srcを参照)invルーチンはdgetrf関数を呼び出そうとしますシステムLAPACKパッケージから取得し、元の行列のLU分解を実行します。これは、ガウス除去と道徳的に同等ですが、高性能BLASでより高速な行列乗算アルゴリズムを使用することで、わずかに低い複雑さに調整できます。

このルートに従う場合、ディストリビューションに付属しているシステムライブラリではなく、ライブラリチェーン全体で新しいライブラリを使用するように強制することはかなり複雑であることに注意する必要があります。現代のコンピューターシステムでの1つの選択肢は、scaLAPACKや(Pythonの世界では)petsc4pyなどのパッケージを使用して並列化されたメソッドを調べることです。しかし、これらは通常、直接法に適用されるよりも線形代数システムの反復ソルバーとして使用され、特定のターゲットの密なシステムよりも疎なシステムのPETScよりも幸せです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.