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
포맷)의 희소 행렬을 구성한다. 분석 방법이 Jacobian의 희소 행렬을 구성하는 데 더 빠르게 작동하지만, 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