2012-05-02 4 views
2

Numpy/Scipy를 사용하여 20k 행렬을 반전시킵니다. 속도가 느립니다.numpy 행렬 역속을 가속화하십시오.

(1) M_inv = M.I 

(2) Ident = np.Identity(len(M)) 
    M_inv = scipy.linalg.solve(M, Ident) 

(3) M_inv = scipy.linglg.inv(M) 

을하지만, 어떤 속도 향상을 보지 못했다 : 나는 시도했다.

속도를 높이는 다른 방법이 있습니까?

답변

6

이것은 큰 행렬이며, 반전되면 느려질 것입니다. 일부 옵션 :

  • 를 사용하여 인텔 MKL에 링크 NumPy와 (예를 들어, Enthought 분배, 또는 당신이 그것을 직접 컴파일 할 수 있습니다), 표준 BLAS/ATLAS에 링크보다 더 빨리해야한다.
  • 매트릭스가 충분하지 않은 경우 scipy.linalg.sparse을 사용하십시오. 그러나 약간의 0 만있는 경우이 속도는 더 느려질 것입니다.
  • 역 행렬을 명시 적으로 표현해야하는 경우 무엇이든 할 수 있습니다. 종종 할 수 있습니다. 명시 적으로 반전시키지 않고 벗어나십시오. 그러나이 행렬로 무엇을하고 있는지 알지 못해도 알기가 어렵습니다.
관련 문제