2012-05-02 27 views
2

Numpy/Scipyを使用して20k行列を逆変換すると速度が遅くなります。 私は試しました:numpy行列逆行列を高速化する

(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) 

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

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

答えて

6

これは大きな行列ですが、反転すると遅くなります。いくつかのオプション:

  • 使用インテルMKLにリンクさnumpyの(例えばEnthought分布、またはあなたはそれを自分でコンパイルすることができます)、標準BLAS/ATLASに対してリンク1よりも高速でなければなりません。
  • マトリックスが十分に疎である場合は、scipy.linalg.sparseを使用してください。しかし、少ししかゼロがなければ遅くなるかもしれません。
  • 逆行列の明示的表現が本当に必要な場合は、何をしようとしているのかを理解してください。明示的にそれを反転させずに立ち去ることができますが、この行列で何をしているのか分からずには分かりません。