3
我有一個奇怪的現象,雖然scipy.sparse.linalg.eigs
對於稀疏矩陣應該更快,但我得到它比正常的eigvals
方法scipy
更慢:稀疏特徵值: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
格式)的稀疏矩陣。雖然分析方法在構造雅可比矩陣的時候工作得更快,但是當使用scipy的特徵值求解方法時,稀疏矩陣特徵值方法是較慢的。我用它來計算特徵值的函數是這樣:
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