3

Python アプリケーションでグラフを描画したいのですが、ソースの numpy 配列が大きすぎてこれを行うことができません (約 1'000'000+)。隣接する要素の平均値を取得したい。最初のアイデアは、C++ スタイルでそれを行うことでした。

step = 19000 # every 19 seconds (for example) make new point with neam value
dt = <ordered array with time stamps>
value = <some random data that we want to draw>

index = dt - dt % step
cur = 0
res = []

while cur < len(index):
    next = cur
    while next < len(index) and index[next] == index[cur]:
        next += 1
    res.append(np.mean(value[cur:next]))
    cur = next

しかし、この解決策は非常に遅くなります。私はこのようにしようとしました:

step = 19000 # every 19 seconds (for example) make new point with neam value
dt = <ordered array with time stamps>
value = <some random data that we want to draw>

index = dt - dt % step
data = np.arange(index[0], index[-1] + 1, step)
res = [value[index == i].mean() for i in data]
pass

このソリューションは、最初のソリューションよりも遅くなります。この問題の最善の解決策は何ですか?

4

1 に答える 1

3

np.histogram任意のビンに合計を提供できます。時系列がある場合、例:

import numpy as np

data = np.random.rand(1000)          # Random numbers between 0 and 1
t = np.cumsum(np.random.rand(1000))  # Random time series, from about 1 to 500

次に、以下を使用して5秒間隔でビン化された合計を計算できますnp.histogram

t_bins = np.arange(0., 500., 5.)       # Or whatever range you want
sums = np.histogram(t, t_bins, weights=data)[0]

合計ではなく平均が必要な場合は、重みを削除し、ビンの集計を使用します。

means = sums / np.histogram(t, t_bins)][0]

この方法は、この回答の方法と似ています。

于 2012-06-20T10:27:33.003 に答える