创建非常大的numpy数组时出现MemoryError [重复]

Posted

技术标签:

【中文标题】创建非常大的numpy数组时出现MemoryError [重复]【英文标题】:MemoryError when creating a very large numpy array [duplicate] 【发布时间】:2016-05-13 15:20:15 【问题描述】:

我正在尝试创建一个非常大的 numpy 零数组,然后将另一个数组中的值复制到大的零数组中。我正在使用 Pycharm,并且我不断收到:MemoryError,即使我尝试只创建数组。以下是我尝试创建零数组的方法:

import numpy as np

last_array = np.zeros((211148,211148))

我已尝试根据以下问题将 Pycharm 中的内存堆从 750m 增加到 1024m:https://superuser.com/questions/919204/how-can-i-increase-the-memory-heap-in-pycharm,但这似乎没有帮助。

如果您需要任何进一步的说明,请告诉我。谢谢!

【问题讨论】:

假设int的大小为4字节,你已经创建了一个大小超过100GB的数组 天哪,我不知道。这太可怕了。这是一个非常稀疏的数组。有什么方法可以在某些位置创建一个空数组,例如:last_array[211148][9] 但其他任何地方都是空的? 这可能会有所帮助:***.com/questions/1857780/… 或者scipy.sparse 模块... @Smac89 假设他使用的是 64 位 Python,np.zeros 将默认创建一个 float64 数组,在这种情况下他正在查看大约 356 GB。 【参考方案1】:

研究在 scipy 中使用稀疏数组功能:scipy.sparse documentation。

这里有一组关于 scipy.sparse 库的示例和教程:Scipy lecture notes: Sparse Matrices in SciPy

这可以帮助您解决内存问题,并使一切运行得更快。


按照您在评论中的要求创建一个空的稀疏数组,其中包含某些位置的值:

有没有什么方法可以创建一个空数组,在某些位置有值,例如:last_array[211147][9] 但其他地方都是空的?

from scipy.sparse import *
values = [42]
row_ind = [211147]
col_ind = [9] 
last_array = csc_matrix((values, (row_ind, col_ind)), shape=(211148,211148))

print(last_array[211147,9])

【讨论】:

非常感谢!我现在正在研究如何从一个数组中获取一堆值到稀疏矩阵中的特定位置。 如果你有兴趣,这里有一个后续问题:***.com/questions/37218550/…

以上是关于创建非常大的numpy数组时出现MemoryError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尝试计算 numpy 数组列中的唯一项时出现“IndexError:数组索引过多”

尝试将列表转换为 numpy 数组时出现 KeyError:0

将 2d numpy 数组传递给 C++ 时出现 TypeError

Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError

Axes3D:尝试构建 3D 绘图时出现 Numpy 数组错误

非常大的numpy数组的效率