我需要创建以下类型的列表
[(latitude, longitude, date), ...]
Run Code Online (Sandbox Code Playgroud)
纬度和经度是浮点数,日期是整数.我的本地机器上的内存不足,因为我需要存储大约6000万个这些元组.什么是在python中表示这些元组的内存效率最高(并且同时易于实现)的方式?
纬度和经度的精度不需要那么大(足以表示诸如-65.100234之类的值),并且整数需要足够大以处理UNIX时间戳.
我之前使用swig来定义"c-structs",它们通常比python更高效,但实现起来很复杂...可能有一些scipy或numpy方式来声明使用较少内存的元组. .有任何想法吗?
如果您习惯使用 NumPy,则可以使用numpy.recarray. 如果您的坐标需要 8 位有效数字,单精度浮点数可能还不够,因此您的记录将有两个双精度浮点数和一个 32 位整数,总共 20 个字节,因此 6000 万条记录将需要 1.2 GB的记忆。请注意,NumPy 数组具有固定大小,如果大小发生变化,则需要重新分配。
代码示例:
# Create an uninitialised array with 100 records
a = numpy.recarray(100,
formats=["f8", "f8", "i4"],
names=["latitude", "longitude", "date"])
# initialise to 0
a[:] = (0.0, 0.0, 0)
# assign a single record
a[0] = (-65.100234, -38.32432, 1309351408)
# access the date of the first record
a[0].date
# access the whole date column
a.date
Run Code Online (Sandbox Code Playgroud)
如果您想避免对 NumPy 的依赖,还可以使用结构ctypes体数组ctypes,它不如 NumPy 数组方便,但比使用 SWIG 更方便。