python 中内存高效的二维可增长数组?

Memory-efficient 2d growable array in python?

我正在开发一个处理大量数据的应用程序。

... 并使 运行 我的计算机内存不足。 :(

Python 对变量有大量的内存开销(根据 sys.getsizeof())。例如,一个包含一个整数的基本元组占用 56 个字节。一个空列表,64 字节。严重的开销。

Numpy 数组非常适合减少开销。但它们并不是为了高效增长而设计的(参见 Fastest way to grow a numpy numeric array). Array (https://docs.python.org/3/library/array.html)似乎很有希望,但它是 1d。我的数据是二维的,一个数组的行数和列宽为 3 个浮点数(理想情况下为 float32),另一个数组的列宽为两个整数(理想情况下为 uint32)。显然,使用 ~80 字节的 python 结构来存储每行 12 或 8 字节的数据将占用我的全部内存。

是在 Python 到 "fake" 2d 期间保持内存使用率下降的唯一现实方法,也就是通过将数组寻址为 arr[row*WIDTH+column] 并将行计数为 len(arr )/宽度?

根据您的意见,我建议您将任务分为两部分:

1) 在第 1 部分中,使用正则表达式解析 JSON 文件并生成两个简单格式的 CSV 文件:没有 headers,没有空格,只有数字。这应该是快速且高效的,没有内存问题:读入文本,写出文本。不要试图在内存中保留您绝对不需要的任何内容。

2) 在第2部分中,使用pandas read_csv()函数直接插入CSV文件。 (是的,pandas!您可能已经知道了,而且速度非常快。)