gpt4 book ai didi

python - Scipy 稀疏矩阵元素明智的乘法

转载 作者:太空狗 更新时间:2023-10-30 03:00:45 24 4
gpt4 key购买 nike

我正在尝试对两个大型稀疏矩阵进行逐元素乘法。两者的大小都在 (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)

关于python - Scipy 稀疏矩阵元素明智的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28187921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com