scipy.sparse.linalg.eigs
が速くスパース行列のためでなければなりませんけれども、私は、特有の現象を持っているよりも遅いですが、私はそれがscipy
の通常eigvals
方法よりも遅く動作することを取得します:スパース固有値:scipy.sparse.linalg.eigs scipy.linalg.eigvals
In [4]: %timeit m.calc_pde_numerical_jacobian(m.initial_state)
10 loops, best of 3: 41.2 ms per loop
In [5]: %timeit m.calc_pde_analytic_jacobian(m.initial_state)
1000 loops, best of 3: 1.42 ms per loop
In [6]: %timeit m.calc_analytic_pde_eigs(m.initial_state)
1 loop, best of 3: 374 ms per loop
In [7]: %timeit m.calc_numeric_pde_eigs(m.initial_state)
1 loop, best of 3: 256 ms per loop
だから方法は、式の私のシステムのヤコビの密行列を構築calc_pde_numerical_jacobian
、及びcalc_pde_analytic_jacobian
は、分析的に(csc
形式)ヤコビのスパース行列を構築します。分析法は、ヤコビ行列の疎行列を構成する上でより速く動作するが、擬似からの固有値発見法を用いるとき、疎行列の固有値法はより遅い。固有値を計算するために使用する関数は次のとおりです。
def calc_numeric_pde_eigs(self,state):
return linalg.eigvals(self.calc_pde_numerical_jacobian(state))
def calc_analytic_pde_eigs(self,state):
return sparse.linalg.eigs(self.calc_pde_analytic_jacobian(state),k=6,which='LR',return_eigenvectors=False)
これがどう起こる可能性がありますか?
マトリックスのサイズは? –
現在の行列のサイズは512x512です – Ohm