4

一連の日時オブジェクトがあり、それらの間の平均デルタを計算したいと考えています。

たとえば、入力が(2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00)の場合、平均デルタは正確に 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 に答える