我有时间序列数据,我目前存储在字典“键”是datetime.datetime
对象的字典中。类似于以下内容:
data[datetime.datetime(2012,5,14,15,28,2)]={'error':error,'flags':flags,'value':value}
我的问题是:找到指定时间最接近的两次(之前和之后)的最佳方法是什么?我需要这个函数尽可能快,因为它在两个最近点之间线性插值的循环内被调用 (~10,000)。
我目前有一种方法需要很长时间,因为它搜索所有键(〜50,000):
def findTime(time):
keys=data.keys()
bdt=10000000000000000000
adt=10000000000000000000
minKey=False
maxKey=False
for key in keys:
dt=(time-key).total_seconds()
if abs(dt)<bdt and dt>0:
bdt=abs(dt)
minKey=key
elif abs(dt)<adt and dt<0:
adt=abs(dt)
maxKey=key
return minKey,maxKey
我尝试使用 bisect:
def findTime(time):
keys=data.keys()
l,r = bisect.bisect_left(time,keys), bisect.bisect_right(time,keys)
return l,r
不幸的是,这会产生一个错误:
TypeError: 'datetime.datetime' object does not support indexing
任何帮助,将不胜感激。