1

私は少しばかげているように感じますが、UNIX タイムスタンプのセットがあると想像してみましょう:

1375110404
1374660925
1374482694
1374242337
1373793867
1373632889
1373187141
1373021668
1372754021
1372599890

私が達成しようとしているのは簡単です: これらの 10 個のタイムスタンプ間の平均時間差を計算したいだけです。正しい計算方法がわかりません。

私が試したのは

1375110404 - 1374660925 = 449479
1374482694 - 1374242337 = 240357
1373793867 - 1373632889 = 160978
1373187141 - 1373021668 = 165473
1372754021 - 1372599890 = 154131

449479 + 240357 + 160978 + 165473 + 154131 = 1170418

1170418 / 5 = 234083,6

しかし、それは私には非論理的に見えます。どんなアドバイスでも大歓迎です。

編集:

これらのスタンプはすべて php 配列から取得されます。

編集:

私を正しい方向に向けてくれた Orangepill に感謝します。最終的な解決策は次のとおりです。

for($cnt = count($array), $res = 0, $i = 1; $i < $cnt; $i++) {
    $res += $array[$i-1] - $array[$i];
}

echo $res/$cnt;

これは計算します

1375110404 - 1374660925 = 449479
1374660925 - 1374482694 = 178231
1374482694 - 1374242337 = 240357
1374242337 - 1373793867 = 448470
1373793867 - 1373632889 = 160978
1373632889 - 1373187141 = 445748
1373187141 - 1373021668 = 165473
1373021668 - 1372754021 = 267647
1372754021 - 1372599890 = 154131

449479 + 178231 + 240357 + 448470 + 160978 + 445748 + 165473 + 267647 + 154131 = 2510514

2510514 / 10 = 251051.4

私には正しいように見えます。

4

2 に答える 2

1

タイムスタンプが厳密な時系列順になっていない場合、現在受け入れられている回答は正しくない結果になります。つまり、負の値は平均をゆがめます。私が間違っているかもしれませんが、時差を負の値としてカウントしたくないのではないかと想像します。結局のところ、100m を -12 秒で走ることはできません!

渡された配列の時間の順序に関係なく、正の時間差に基づいて常に平均を与える代替手段として、この回答を提供します。

function array_average_diff(array $array)
{
    $diff = 0;
    for($i = 1; $i < count($array); $i++){
        $diff += abs($array[$i] - $array[$i - 1]);
    }
    return $diff/count($array);
}

動いているのを見る

于 2013-08-20T12:29:35.497 に答える