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

时间:2019-08-20 15:36:41

标签: python numpy machine-learning memory numpy-ndarray

尽管存在如此多的问题,但我找不到适用于Windows的任何可行解决方案:

我有一个很大的列表列表(〜列表):(〜30000,48,411)(在某些情况下甚至更大),我需要它作为一个numpy数组来训练我的LSTM模型... 有什么想法,如何解决? (我不使用Linux,仅使用Windows和python 64位)

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

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

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

1 个答案:

答案 0 :(得分: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 documentation上有更多有关如何创建dask数组的示例。

通常,如果您的数据太大而无法处理内存(2-3GB的数据不应该这样),则处理将非常缓慢,因此,最好的选择是先分块再分析