【发布时间】:2017-12-28 05:52:16
【问题描述】:
我正在开发一个处理大量数据的应用程序。
.... 并且一直运行我的计算机内存不足。 :(
Python 在变量上有大量内存开销(根据 sys.getsizeof())。例如,一个包含一个整数的基本元组占用 56 个字节。一个空列表,64 个字节。严重的开销。
Numpy 数组非常适合减少开销。但它们并非旨在高效增长(请参阅Fastest way to grow a numpy numeric array)。 Array (https://docs.python.org/3/library/array.html) 看起来很有希望,但它是 1d。我的数据是 2d 的,一个数组的行数和列宽为 3 个浮点数(理想情况下为 float32),另一个数组的列宽为两个整数(理想情况下为 uint32)。显然,使用约 80 字节的 python 结构来存储每行 12 或 8 字节的数据将消耗我的内存。
是在 Python 中降低内存使用以“伪造”2d 的唯一现实方法吗,也就是通过将数组寻址为 arr[row*WIDTH+column] 并将行计数为 len(arr)/WIDTH?
【问题讨论】:
-
在numpy中创建数组的方法有很多。你的数据来自哪里?您是在计算它、从套接字读取它、从 CSV 文件中提取它,还是...?
-
整数、浮点数、字节、字符串?
-
@Austin:我正在用 json 文件中的正则表达式解析它。一些点和线在处理过程中被丢弃,但文件很大。 wwii:我提到了问题中的数据类型——最好是 float32 和 uint32。
标签: python arrays memory out-of-memory