python中内存高效的2d可扩展数组?

时间:2017-07-22 02:51:51

标签: python arrays memory out-of-memory

我正在处理处理大量数据的应用。

....并且不断运行我的电脑内存。 :(

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

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

唯一可行的方法是在Python中将内存使用率降低到"假" 2d,又称将数组作为arr [row * WIDTH + column]并将行计为len(arr)/ WIDTH?

1 个答案:

答案 0 :(得分:1)

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

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

2)在第2部分中,使用pandas read_csv()函数直接在CSV文件中进行填充。 (是的,大熊猫!你可能已经得到了它,并且它很快就会好起来。)