2014-12-01 2 views
1

저는 scikit-learn의 pairwise_distances 함수를 사용하여 거리 매트릭스를 계산해야하는 상대적으로 큰 NumPy 배열 (거의 300k 행과 20+ 열, 대부분의 값은 0입니다)이 있습니다.어떤 SciPy 스파 스 매트릭스 클래스가 거리 매트릭스를 계산하는 것이 가장 좋습니까?

입력 배열을 희소 행렬로 변환하지 않으면이 프로세스가 메모리 오류로 실행됩니다. SciPy는 많은 sparse matrix classes을 제공하며이 특정 상황에 가장 적합한 것이 무엇인지 알 수 없습니다.

CSR 또는 CSC를 선호하는 SO answer가 있지만 거리 매트릭스를 계산하는 데 가장 적합한 것이 어느 것인지 명확하지 않습니다. 어떤 제안이라도 환영합니다!

+0

거리 매트릭스가 희박하지 않습니다. 글쎄, 당신은 중복 포인트를 많이 가지고 있다면 그것이 희박해질 수 있다고 생각하지만, 그것은 매우 드문 경우입니다. – jme

+0

거리 매트릭스가 아닌 입력 배열이 스파 스 매트릭스로 변환하려는 배열입니다. –

+0

아, 알겠습니다. 그러나 그 결과 거리 매트릭스는 'n'이 2 개의 항목을 선택하게됩니다. (n = 300,000의 경우) 가장 확실하게 메모리에 맞지 않습니다. 따라서 입력 배열을 희소 배열로 변환하면 많은 도움이되지 않을 것이라고 생각합니다. – jme

답변

1

CSR은 행순으로 정렬되며, CSC는 열순으로 정렬됩니다. 따라서 CSR을 사용하면 행을보다 빠르게 액세스 할 수 있으며 CSC를 사용하면 열 액세스가 더 빨라졌습니다. sklearn.metrics.pairwise.pairwise_distances은 행이 인스턴스이고 열이 속성 인 X 입력으로 사용되므로 스파 스 매트릭스에서 행에 액세스합니다. 따라서 CSR을 사용하는 것이 더 효율적일 수 있습니다.