一种内存高效的大零点矩阵生成方法python

2021-04-11 14:11:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试制作一个非常大的矩阵,我不确定如何以一种内存高效的方式这样做。在

我试着用numpy,它对我的小箱子(2750086X300)很管用 然而,我有一个更大的,2750086X1000,它太大了,我无法运行。在

我想用int来创建它,但是我会给它添加浮点值,所以不确定cld如何影响它。在

我试着找到一些关于制作一个稀疏的零填充数组的东西,但是cldnt在这里或其他地方找到了任何好的主题/问题/建议。在

有什么好建议吗?我目前正在使用python,所以我在寻找python的解决方案,但是我愿意尝试其他语言。在

泰铢


编辑:

谢谢你的建议,我试过了scipy.sparse.csr_矩阵设法创造了一个深度增加的矩阵。在

我正在做的是:

matrix = scipy.sparse.csr_matrix((df.shape[0], 300))
## matrix = np.zeros((df.shape[0], 

for i, q in enumerate(df['column'].values):    

    matrix[i, :] = function(q)

其中function相当于该行上的向量运算函数。在

现在,如果我在np.零,很容易做到,大约10分钟。在

现在,如果我尝试对scipy稀疏矩阵做同样的操作,大约需要50个小时。这不太合理。在

有什么建议吗?在


编辑2:

在scipy.sparse.lil峎矩阵成功了

循环大约需要20分钟,使用的内存比np.零在

泰铢。在


编辑3:

仍然是昂贵的内存。决定不在矩阵上存储数据。一次处理1行。从中获取相关值/度量值,将值存储在原始数据框中,然后重新运行。在

1条回答
网友
1楼 ·

尝试scipy.sparse.csr_matrix

from scipy.sparse import *
from scipy import *
a=csr_matrix( (2750086,1000), dtype=int8 )

那么a

^{pr2}$

例如,如果您这样做:

from scipy.sparse import *
from scipy import *
a=csr_matrix( (5,4), dtype=int8 ).todense()
print(a)

你会得到:

[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

另一个选择是使用scipy.sparse.lil_matrix

a = scipy.sparse.lil_matrix((2750086,1000), dtype=int8 )

对于设置元素(如a[1,1]=2),这似乎更有效。在

相关问题