内存错误:无法分配数组形状({非常大}),Windows Python 的解决方案

4

虽然有很多这样的问题,但我在Windows上找不到任何可行的解决方案:

我有一个大型列表的列表(大小为:~30000,48,411)(在某些情况下甚至更大),我需要将其转换成numpy数组以训练我的LSTM模型... 有什么想法如何解决吗?(我不使用Linux,只用Windows和64位的Python)

我已经尝试将它转换为np.float32->仍然太大! 然后我试图将其转换为np.float16->“元组不可调用”

想法是通过np.memmap()保存和加载它,但是在此之前我也需要将其转换为numpy数组。(此格式也需要用于训练过程,因此目标是将其转换为np.NdArray)

我甚至尝试将其拆分成较小的列表(十分之一),但仍然无法分配。


你能否发布一下你遇到的错误和一个最小可复现代码? - user1834164
1个回答

0

我不确定你的“列表嵌套列表”是以什么格式存在的,也不知道你所说的“太大”是指内存过大吗?但你可能需要了解一下dask。 使用它,你可以做出如下操作:

import dask.array as da
import dask
import numpy as np

...
arrays = []
for i in range(nfiles):
    arrays.append(da.from_delayed(read_list(...), shape = (...))
arr = da.stack(arrays)

Dask文档提供了更多有关如何创建Dask数组的示例。

一般来说,如果你的数据太大以至于无法在内存中处理(对于2-3GB的数据来说不应该是这种情况),那么处理速度会非常慢,因此最好的方法是将其分块,然后逐个分析每个块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接