4

Numpy / Scipyを使用して20kの行列を反転していますが、遅いです。私は試した:

(1) M_inv = M.I

(2) Ident = np.Identity(len(M))
    M_inv = scipy.linalg.solve(M, Ident)

(3) M_inv = scipy.linglg.inv(M)

しかし、スピードアップは見られませんでした。

これをスピードアップする他の方法はありますか?

4

1 に答える 1

7

これは大きなマトリックスであり、反転すると遅くなります。いくつかのオプション:

  • Intel MKLに対してリンクされたnumpyを使用します(たとえば、Enthoughtディストリビューション、または自分でコンパイルできます)。これは、標準のBLAS/ATLASに対してリンクされたものよりも高速である必要があります。
  • 行列が十分にスパースである場合は、を使用しますscipy.linalg.sparse。(ただし、ゼロが数個しかない場合、これはおそらく遅くなります。)
  • 逆行列を使用して何をしようとしているのかを実行するために、逆行列の明示的な表現が本当に必要かどうかを判断します。多くの場合、明示的に逆行列を作成しなくても逃げることができますが、自分が何であるかを知らずに判断するのは困難です。このマトリックスでやっています。
于 2012-05-02T16:47:38.227 に答える