小编epa*_*aro的帖子

制作大零矩阵python的内存有效方法

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

我试图使用 numpy,它适用于我的小机箱 (2750086X300) 但是,我得到了一个更大的 2750086X1000,它对我来说太大了,无法运行。

我想用整数来制作它,但我会向它添加浮点值,所以不确定 cld 会如何影响它。

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

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

谢谢


编辑:

谢谢你的建议,我试过 scipy.sparse.csr_matrix 它设法创建了一个矩阵,但大大增加了通过它的时间。

这是我正在做的事情:

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)
Run Code Online (Sandbox Code Playgroud)

其中函数几乎是该行上的向量运算函数。

现在,如果我在 np.zeros 上进行循环,它会很容易完成,大约 10 分钟。

现在,如果我尝试对 scipy 稀疏矩阵做同样的事情,大约需要 50 个小时。这不是那么合理。

有什么建议吗?


编辑2:

scipy.sparse.lil_matrix 做到了

循环需要大约 20 分钟,并且使用的内存比 np.zeros 少

谢谢。


编辑3:

还是内存贵。决定不在矩阵上存储数据。一次处理 1 行。从中获取相关值/指标,将值存储在原始 df 中,再次运行。

python memory performance numpy scipy

1
推荐指数
1
解决办法
1870
查看次数

标签 统计

memory ×1

numpy ×1

performance ×1

python ×1

scipy ×1