如何解决Scipy稀疏矩阵消耗大量内存
我有一个代码,该代码需要一个函数来生成大小为200000x200000的稀疏矩阵,并且每行有9001个非零条目,因此总共有近1800200000个非零元素。但是,当我用psutil软件包检查生成矩阵前后的可用内存差异时,我发现使用了将近20 Gb内存。如此大量的使用会给我的个人计算机带来内存错误,并且即使我在远程计算服务器上运行它也会极大地降低代码的速度。
当我想到一个稀疏矩阵时,由于非零元素的比例与矩阵的大小相比非常小,所以我并不希望它在RAM上花费如此多的内存。创建此矩阵时,有什么方法可以使用更少的内存?或者,具有这种大小且非零元素的稀疏矩阵的预期内存使用量为20 Gb,您有什么主意吗?
我的代码的简化版本如下:
from scipy.sparse import diags
import numpy as np
import gc
import psutil
before_w = psutil.virtual_memory().available / 1024 ** 2 #MB
def get_W():
N = 200000
N_nonzero = 9001
# remove the first element in the copy since sparse.diags does not like duplicate entries
vals = np.random.random([N_nonzero,])
offsets = np.arange(0,int(np.ceil(N_nonzero/2)))
offsets = np.concatenate([offsets,-1*np.asarray(offsets[1:])])
W = diags(vals,offsets,shape=(N,N),format = "csr")
# del vals,offsets
# gc.collect()
return W
W_mat = get_W()
after_w = psutil.virtual_memory().available / 1024 ** 2 #MB
print('Difference : ',after_w-before_w,' MB')
这是我运行代码的操作系统规范:
发行者ID:CentOS
说明:CentOS Linux版本7.4.1708(核心)
发布:7.4.1708
代号:Core
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。