我有一系列日期时间对象,想计算它们之间的平均增量。
例如,如果输入是(2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00)
,那么平均 delta 正好是 00:10:00 或 10 分钟。
关于如何使用 Python 进行计算的任何建议?
就算法而言,这是一个简单的算法。只需找到最大和最小日期时间,取差值,然后除以您查看的日期时间数。
如果你有一个日期时间数组,你可以这样做:
mx = max(a)
mn = min(a)
avg = (mx-mn)/(len(a)-1)
取回平均差。
编辑:修复了一个错误
说a
是你的清单
sumdeltas = timedelta(seconds=0)
i = 1
while i < len(a):
sumdeltas += a[i-1] - a[i]
i = i + 1
avg_delta = sumdeltas / (len(a) - 1)
这确实会将您的增量平均在一起。
由于您似乎在示例中丢弃了时间 1 和 3 之间的 20 分钟增量,我想说您应该只对日期时间列表进行排序,将相邻时间之间的增量相加,然后除以 n-1。
您有任何代码可以与我们分享,以便我们帮助您调试吗?
您可以从前一个日期中减去每个连续的日期(产生一个 timedelta 对象,它表示以天、秒为单位的差异)。然后,您可以平均 timedelta 对象以找到您的答案。
小澄清
from datetime import timedelta
def avg(a):
numdeltas = len(a) - 1
sumdeltas = timedelta(seconds=0)
i = 1
while i < len(a):
delta = abs(a[i] - a[i-1])
try:
sumdeltas += delta
except:
raise
i += 1
avg = sumdeltas / numdeltas
return avg