gpt4 book ai didi

python - Python 中的算法可以存储和搜索每天发生的数千个编号事件?

转载 作者:行者123 更新时间:2023-12-02 00:10:31 26 4
gpt4 key购买 nike

我正在研究存储和查询大量项目的事件发生历史记录的解决方案。

这是一个简化的场景:我每天都会收到 200 000 个路灯(标记为 sl1 到 sl200000)的日志,其中显示路灯当天是否运行。灯的使用时间长短并不重要,重要的是它是在给定的日历日。

还为每个灯存储其他信息,Python 类的开头如下所示:

class Streetlamp(object):
"""Class for streetlamp record"""
def __init__(self, **args):
self.location = args['location']
self.power = args['power']
self.inservice = ???

我的 py-foo 不太好,我想避免在磁盘/内存存储上过于贪婪的解决方案。因此,具有(年、月、日)元组字典的解决方案可能是一种解决方案,但我希望获得更有效解决方案的指示。

记录可以存储为位流,每个位代表从 1 月 1 日开始的一年中的一天。因此,如果灯在 2010 年的前三天运行,则记录可以是:

sl1000_up = dict('2010': '11100000000000...', '2011':'11111100100...')

跨年份边界的搜索需要合并,闰年是一种特殊情况,而且我需要使用这个自制的解决方案进行相当多的编码/解码。好像不太安静吧。 speed-up-bitstring-bit-operations , how-do-i-find-missing-dates-in-a-listfinding-data-gaps-with-bit-masking我在那里发现了一些有趣的帖子。我还调查了python-bitstring并进行了一些谷歌搜索,但似乎没有什么真正合适的。

此外,我希望能够搜索“间隙”,例如“三天或更多天没有行动”,并且必须将标记的日期转换为真实的日历日期。

我希望得到有关可能解决方案的想法或指示。为了添加更多细节,可能有趣的是使用的后端数据库是 ZODB,并且首选可以 pickle 的纯 Python 对象。

最佳答案

在 Numpy 中创建二维数组:

import numpy as np

nbLamps = 200000
nbDays = 365

arr = np.array([nbLamps, nbDays], dtype=np.bool)

它将非常节省内存,您可以轻松聚合日期和灯。

为了更好地掌控日子,请查看scikits.timeseries 。它们将允许您使用日期时间对象访问日期。

关于python - Python 中的算法可以存储和搜索每天发生的数千个编号事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734591/

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