【发布时间】:2017-08-14 17:27:34
【问题描述】:
我有一个奇怪的现象,虽然scipy.sparse.linalg.eigs 对于稀疏矩阵应该更快,但我知道它比scipy 的正常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
-
对于带宽较小的稀疏矩阵情况更糟
标签: python numpy scipy sparse-matrix eigenvalue