gpt4 book ai didi

python - 易于实现内存高效元组列表的结构

转载 作者:太空狗 更新时间:2023-10-30 01:24:04 27 4
gpt4 key购买 nike

我需要创建以下类型的列表

[(latitude, longitude, date), ...]

其中纬度和经度是 float ,日期是整数。我的本地机器内存不足,因为我需要存储大约 6000 万个这样的元组。在 Python 中表示这些元组的内存效率最高(同时易于实现)的方法是什么?

纬度和经度的精度不需要那么高(刚好足以表示 -65.100234 之类的值),整数需要足够大以处理 UNIX 时间戳。

我之前使用 swig 来定义“c-structs”,它们通常比 python 的内存效率高得多,但这实现起来很复杂......也许有一些 scipy 或 numpy 方法来声明这样使用较少的元组内存...有什么想法吗?

最佳答案

如果您可以使用 NumPy,您可以使用 numpy.recarray .如果您的坐标需要 8 位有效数字,单精度 float 可能是不够的,因此您的记录将有两个 double float 和一个 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

如果你想避免对 NumPy 的依赖,你也可以使用 ctypes 结构的 ctypes 数组,它不如 NumPy 数组方便,但比使用更方便痛饮。

关于python - 易于实现内存高效元组列表的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com