3

簡単な質問ですが、簡単な答えを見つけることができませんでした。

イベントが発生する時間を秒単位でカウントするデータのリストがあります。

[200.0 420.0 560.0 1100.0 1900.0 2700.0 3400.0 3900.0 4234.2 4800.0 etc..]

1 時間 (3600 秒) ごとに発生するイベントの数をカウントし、これらのカウントの新しいリストを作成したいと考えています。

これがダウンサンプリングと呼ばれることは理解していますが、見つけることができるすべての情報は従来の時系列に関連しています。

上記の例では、新しいリストは次のようになります。

[7 3 etc..]

どんな助けでも大歓迎です。

4

3 に答える 3

1

f_iサンプリングとは、特定の離散時間でデータ (サンプル) を取得することを意味しますt_i。時間単位あたりのサンプル数は、サンプリング レートを示します。ダウンサンプリングはリサンプリングの特殊なケースです。これは、サンプリングされたデータを別のサンプリング ポイントのセットにマッピングすることを意味しますt_i'。ここでは、サンプリング レートが小さいポイントにマッピングし、サンプルをより粗くします。

最初のリストには、サンプル ポイントt_i(単位は秒)が含まn_iれており、インデックスiに対応するイベントの数が間接的に含まれていますn_i = i + 1

T定期的な時間(単位は秒) が経過した後、時々リストを減らすと、時間に新しいセットn_i'にリサンプリングされt_i' = i * Tます。時間内に何も起こらない可能性があるため、ダウンサンプリングは書きませんでしたT。これは、より多くのデータポイントを取得するため、アップサンプリングを意味します。

計算のために、入力リストが空かどうかを確認します。その場合n' = 0、出力リストに入る必要があります。それ以外の場合はm、時間の経過とともに測定された入力リストにエントリがありT、次の式を使用できます。

n' = m * 3600 / T

上記n'は出力リストに入ります。これは 1 時間あたりのイベントにスケーリングされます。

于 2015-02-10T11:46:24.267 に答える
1

質問にはscipyタグがあり、 にscipy依存してnumpyいるため、 を使用した回答で問題ないと思いnumpyます。

タイムスタンプに関連付けられた時間を取得するにはt、 の整数部分を取得できますt/3600。次に、1 時間ごとのイベント数を取得するために、これらの整数の発生回数をカウントできます。numpy 関数bincountはそれを行うことができます。

これは、計算のための派手なワンライナーです。タイムスタンプをnumpy配列に入れましたt

In [49]: t = numpy.array([200.0, 420.0, 560.0, 1100.0, 1900.0, 2700.0, 3400.0, 3900.0, 4234.2, 4800.0, 8300.0, 8400.0, 9500.0, 10000.0, 14321.0, 15999.0, 16789.0, 17000.0])

In [50]: t
Out[50]: 
array([   200. ,    420. ,    560. ,   1100. ,   1900. ,   2700. ,
         3400. ,   3900. ,   4234.2,   4800. ,   8300. ,   8400. ,
         9500. ,  10000. ,  14321. ,  15999. ,  16789. ,  17000. ])

これがあなたの計算です:

In [51]: numpy.bincount((t/3600).astype(int))
Out[51]: array([7, 3, 4, 1, 3])
于 2015-02-10T14:40:52.887 に答える