두 개의 큰 스파 스 매트릭스에 대해 엘리먼트 단위의 곱셈을 수행하려고합니다. 둘 다 약 100M 요소가있는 크기 (400K X 500K)입니다.Scipy 스파 스 매트릭스 행렬 곱셈
그러나 동일한 위치에 0이 아닌 요소가 없으며 0이 아닌 요소의 수가 같지 않을 수 있습니다. 두 경우 모두, 한 행렬의 0이 아닌 값과 다른 행렬의 0 값을 0으로 곱하면됩니다.
모든 접근 방식에서 메모리가 부족합니다 (8GB). 나는있을 수 없다. 이것들은 내가 시도한 것이다.
A와 B는 희소 행렬입니다 (Ive는 COO 및 CSC 형식으로 시도했습니다).
# I have loaded sparse matrices A and B, and have a file opened in write mode
row,col = A.nonzero()
index = zip(row,col)
del row,col
for i,j in index :
# Approach 1
A[i,j] *= B[i,j]
# Approach 2
someopenfile.write(' '.join([str(i),str(j),str(A[j,j]*B[i,j]),'\n']))
# Approach 3
if B[i,j] != 0 :
A[i,j] = A[i,j]*B[i,j] # or, I wrote it to a file instead
# like in approach 2
for 루프를 주석 처리하면 거의 3.5GB의 메모리가 사용됩니다. 그러나 제품을 파일에 쓰거나 행렬에 다시 쓰는 순간 루프를 사용하는 순간 메모리 사용량이 전체 메모리를 차지하여 실행을 멈추게하거나 시스템이 멈 춥니 다. 어떻게하면 메모리를 많이 소비하지 않고도이 작업을 수행 할 수 있습니까?
오 .. 그건 그냥, 일 :
경우 당신이 필요한 희소 행렬의 올바른 형식이 아닙니다. 감사! 더블 엑스 – Avisek