Avi*_*sek 7 python scipy sparse-matrix matrix-multiplication
我正在尝试对两个大型稀疏矩阵进行元素乘法。两者的大小都在 (400K X 500K) 左右,大约有 100M 元素。
但是,它们可能不会在相同位置具有非零元素,并且它们可能不会具有相同数量的非零元素。在任何一种情况下,我都可以将一个矩阵的非零值和另一个矩阵中的零值相乘为零。
我在每种方法中都不断耗尽内存(8GB),这没有多大意义。我不应该。这些是我尝试过的。
A 和 B 是稀疏矩阵(我尝试过 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 的内存。但是在我使用循环的那一刻,无论是将产品写入文件还是返回到矩阵,内存使用量都会达到完整内存,导致我停止执行,或者系统挂起。如何在不消耗这么多内存的情况下执行此操作?
我怀疑当您执行操作时,您的稀疏矩阵变得不稀疏,您是否尝试过:
A.multiply(B)
因为我怀疑它会比您可以轻松做的任何事情都得到更好的优化。
如果 A 还不是正确类型的稀疏矩阵,您可能需要:
A = A.tocsr()
# May also need 
# B = B.tocsr()
A = A.multiply(B)
| 归档时间: | 
 | 
| 查看次数: | 7767 次 | 
| 最近记录: |