모형 축소를 위해 행렬 의 20 개 가장 큰 특이 값과 연관된 왼쪽 특이 벡터를 계산하려고합니다 . 여기서 N ≈ 10 6 및 k ≈ 10 3 입니다. 불행히도 내 행렬 A 는 아무런 구조없이 밀도가 높습니다.
이 크기의 임의 행렬에 대해 파이썬 svd의 numpy.linalg모듈에서 루틴을 호출하면 메모리 오류가 발생합니다. 이는 할당에 의한 분해 용 = V S U .
이 함정을 피하는 알고리즘이 있습니까? 예를 들어 0이 아닌 특이 값으로 연결된 특이 벡터 만 설정하여.
나는 계산 시간과 정확성을 거래 할 준비가되었습니다.
full_matrices'0이 아닌'부분 만 계산되도록 False로 설정 하는 옵션 이 있습니다. 그럼에도 불구하고 계산을 더 줄일 수있는 방법이 있습니까?
numpy백엔드 포트란 코드의 사용 LAPACKE_dgesvd표준 SVD에 대한 루틴을. 그러나 일반적으로 행렬은 C_CONTIGOUS(으로 확인 matrix.flags)입니다. 따라서 포트란 정렬을 위해 데이터를 복사합니다. 또한 lapack 루틴 dgesvd를 실행하는 동안 매트릭스의 다른 사본 (또는 최소한 메모리)이 필요합니다. 메모리 정렬이 처음부터 포트란 스타일인지 확인하면 하나의 사본을 제거 할 수 있습니다.