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。我将(再次)编辑。