矩阵处理期间发生内存错误-稀疏矩阵会解决吗?

时间:2019-02-22 20:02:58

标签: python pandas numpy scipy

我当然没有使用Python稀疏矩阵的经验。我一直在阅读有关SciPy稀疏矩阵的各种答案和文档,它们听起来非常引人注目。但我不确定它们是否将是解决我眼前问题的解决方案。这是我的问题:

v=proxy_chunk.proxy_pos_bp.values.astype(np.uint32)
s1=gene_chunk.start.values.astype(np.uint32)
s2=gene_chunk.end.values.astype(np.uint32)
mult_matr = ((v>=s1[:,None])&(v<=s2[:,None])).T
proxy_chunk['extract'] = [list(gene_chunk.loc[x, 'extract']) for x in mult_matr]

基本上,我的dataframe'proxy_chunk'具有变量'proxy_pos_bp',它只是数字,例如[20,12345,900,99,97,600321,15]。我的dataframe“ gene_chunk”具有两个变量“ start”和“ end”,它们以大于零的项定义间隔的开始和结束。假设开始是[40,12000,600000],结束是[98,15000,610000]。我只想提出一个矩阵,逐行描述'proxy_pos_bp'是否在每个间隔的范围内。

以上效果非常好。在这种情况下,mult_matr看起来像这样:

array([[False, False, False],
       [False,  True, False],
       [False, False, False],
       [False, False, False],
       [ True, False, False],
       [False, False,  True],
       [False, False, False]])

问题在于它是记忆a。当我在最大的proxy_chunk上运行它时,大约有110,000行,与之相对应的gene_chunk相比,我吃掉了500 GB的RAM,不得不在使群集崩溃之前终止该进程。但是,我注意到的是,mult_matr本质上适合稀疏矩阵的定义;大多数值是False,有些是True。将其直接输出到稀疏矩阵是否可以解决我的问题?是否可以直接输出到稀疏矩阵?

0 个答案:

没有答案