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 (将#修改为@)