我的情况是,我的时间粒度比定位粒度更精细。假设我正在以10 Hz的频率测量位置,但我正在以100 Hz进行其他测量。我想知道是否有人知道将位置与时间间隔相关联的聪明/有效方式?也就是说,给定落在该间隔内的时间,查找将返回适当的位置。可能只是涉及元组列表(start_time,end_time,position)和循环的简单实现不会是灾难性的,但我很想知道其他人是如何处理这类问题的。
答案 0 :(得分:1)
您可以拥有一个将间隔起点或终点映射到位置的数据结构。为了计算你需要查找的间隔,要么对所讨论的时间值做一些适当的舍入(如果间隔可以被认为足够常规),或者使用bisect
模块查找最近的所有发生间隔列表中的起点或终点。
答案 1 :(得分:1)
执行此操作的一种方法是存储字典键的排序列表(即时间值),并使用bisect
库查找给定中间值的相应键
positions = {10: (1, 30), 20: (20, 30), 30: (40, 40)}
# In practice, you want to create and add to this list
# the same time you add keys and values to the positions dictionary.
times = sorted(positions.keys())
t = 23
# Get the nearest time values (higher and lower)
# Test them both to see which is closer (ie. whether we
# should round up or down)
index = bisect.bisect(times, t)
l_i = max(index - 1, 0)
r_i = min(index, len(times) - 1)
if abs(times[l_i] - t) < abs(times[r_i] - t):
t_nearest = times[l_i]
else:
t_nearest = times[r_i]
position = positions[t_nearest]
每当您向位置字典添加新的time: position
值时,请务必将时间密钥添加到times
排序列表中。您可以使用bisect将其插入正确的位置
bisect.insort(times, 25)