4

我有一系列日期时间对象,想计算它们之间的平均增量。

例如,如果输入是(2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00),那么平均 delta 正好是 00:10:00 或 10 分钟。

关于如何使用 Python 进行计算的任何建议?

4

5 回答 5

12

就算法而言,这是一个简单的算法。只需找到最大和最小日期时间,取差值,然后除以您查看的日期时间数。

如果你有一个日期时间数组,你可以这样做:

mx = max(a)
mn = min(a)
avg = (mx-mn)/(len(a)-1)

取回平均差。

编辑:修复了一个错误

于 2008-10-07T18:26:46.063 回答
3

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)

这确实会将您的增量平均在一起。

于 2008-10-08T03:33:47.473 回答
2

由于您似乎在示例中丢弃了时间 1 和 3 之间的 20 分钟增量,我想说您应该只对日期时间列表进行排序,将相邻时间之间的增量相加,然后除以 n-1。

您有任何代码可以与我们分享,以便我们帮助您调试吗?

于 2008-10-07T18:32:46.317 回答
0

您可以从前一个日期中减去每个连续的日期(产生一个 timedelta 对象,它表示以天、秒为单位的差异)。然后,您可以平均 timedelta 对象以找到您的答案。

于 2008-10-07T18:32:56.160 回答
0

小澄清

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
于 2009-10-15T10:04:17.727 回答