Python 调用np.array(数据)时给出MemoryError的大型稀疏列表

Python 调用np.array(数据)时给出MemoryError的大型稀疏列表,python,numpy,Python,Numpy,我有一个很大的矩阵0s和1s,大部分是0s。它最初存储为一个包含25000个其他列表的列表,每个列表的长度约为2000整数 我正试图把它们放到一个numpy数组中,这是我的另一个程序所需要的。所以我运行training\u data=np.array(data),但这将返回一个MemoryError 为什么会这样?我假设程序要处理的内存太多(这让我很惊讶),但如果是这样,有没有更好的方法来处理呢?一个(短)整数需要存储两个字节。你需要25000个列表,每个列表有2000个整数;那就 25000*

我有一个很大的矩阵
0
s和
1
s,大部分是
0
s。它最初存储为一个包含25000个其他列表的列表,每个列表的长度约为2000整数

我正试图把它们放到一个numpy数组中,这是我的另一个程序所需要的。所以我运行
training\u data=np.array(data)
,但这将返回一个
MemoryError

为什么会这样?我假设程序要处理的内存太多(这让我很惊讶),但如果是这样,有没有更好的方法来处理呢?

一个(短)整数需要存储两个字节。你需要25000个列表,每个列表有2000个整数;那就

25000*2000*2/1000000 = 100 MB
这在我的计算机(4GB RAM)上运行良好:

你能例示上面的零矩阵吗

是否将文件读入Python列表,然后将其转换为numpy数组?这是个坏主意;它将至少使内存需求增加一倍。您的数据的文件格式是什么

对于稀疏矩阵,提供了各种替代数据类型,这将更加有效


编辑:回应OP的评论

我有25000个其他类的实例,每个实例返回一个长度约为2000的列表。我想把所有这些返回的列表放入
np.array

好吧,你不知怎的超过了8GB!要解决这个问题,不要在内存中进行所有这些操作。每次将数据写入一个类的磁盘,然后删除实例并从numpy读取文件

先做

with open(..., "wb") as f:
    f = csv.writer(f)
    for instance in instances:
        f.writerow(instance.data)
这将把您的所有数据写入一个大的ish CSV文件。然后,您可以使用:

(短)整数需要存储两个字节。你需要25000个列表,每个列表有2000个整数;那就

25000*2000*2/1000000 = 100 MB
这在我的计算机(4GB RAM)上运行良好:

你能例示上面的零矩阵吗

是否将文件读入Python列表,然后将其转换为numpy数组?这是个坏主意;它将至少使内存需求增加一倍。您的数据的文件格式是什么

对于稀疏矩阵,提供了各种替代数据类型,这将更加有效


编辑:回应OP的评论

我有25000个其他类的实例,每个实例返回一个长度约为2000的列表。我想把所有这些返回的列表放入
np.array

好吧,你不知怎的超过了8GB!要解决这个问题,不要在内存中进行所有这些操作。每次将数据写入一个类的磁盘,然后删除实例并从numpy读取文件

先做

with open(..., "wb") as f:
    f = csv.writer(f)
    for instance in instances:
        f.writerow(instance.data)
这将把您的所有数据写入一个大的ish CSV文件。然后,您可以使用:


超过100MB的方式:)我有8GB的RAM。在下一次编辑中,我有25000个其他类的实例,每个实例返回一个长度约为2000的列表。我想把所有这些列表返回到np中。array@zebra:哇——你快超过8GB了!令人印象深刻的是:o。我将(再次)编辑。超过100MB:)我有8GB的RAM。要进行下一次编辑,我有25000个其他类的实例,每个实例返回一个长度约为2000的列表。我想把所有这些列表返回到np中。array@zebra:哇——你快超过8GB了!令人印象深刻的是:o。我将(再次)编辑。