2016-09-05 2 views
0

대칭 구조를 가진 매우 큰 (100,000 x 100,000) 매우 희박한 (0.01 % 채우기) 복소수 (a + b * i) 행렬을 사용한 선형 프로그래밍 및 행렬 조작을위한 수치 알고리즘을 프로토 타이핑하고 비대칭 값. 필자는 7 년 동안 MATLAB을 기쁘게 사용해 왔지만 오픈 소스이므로 Python으로 전환하라는 제안을 받고 있습니다.파이썬에서 복잡한 희소 선형 대수학의 한계

많은 파이썬 수치 패키지를 사용할 수 있지만 파이썬에는 이러한 유형의 매트릭스를 처리하고 선형 최적화 문제를 고속으로 해결하기위한 한계가 있다는 것을 알고 있습니다. 파이썬은 MATLAB의 백 슬래시 A \ b 연산자와 비슷한 속도의 복잡한 복잡한 행렬 솔버를 가지고 있습니까? (나는 가우스 및 LU 코드를 작성했지만, A \ B는 항상 매트릭스 크기로 선형 적으로 시도하고 스케일링 한 것보다 적어도 5 배 이상 빠릅니다.)

답변

0

아마도 희소 솔버는 적어도 A\b보다 느립니다. 이는 MATLAB 스크립트의 인터프리터 오버 헤드로 인한 것입니다. 내부적으로 MATLAB은 LU() 함수와 A\b 연산자에 UMFPACK의 다중 선행 해를 사용합니다 (UMFPACK manual 참조).

과 함께 scipy.sparse 패키지를 시도해보십시오. 사용 가능한 해결 방법은 다음과 같습니다. 특히 spsolve() 함수에는 기본 SuperLU 솔버 대신 UMFPACK 루틴을 호출하는 옵션이 있습니다.

... 선형 최적화 문제를 실시간으로 실시간으로 해결합니까?

시간 제약이 있으므로 직접 해석하는 대신 반복적 인 해석을 고려하는 것이 좋습니다.

SciPy에서 제공되는 spsolve 및 iterative solvers에서이 사이트의 another post에서 SuperLU 구현 성능에 대한 아이디어를 얻을 수 있습니다.