This questionには、移動平均の取得方法に関する多くの有益な回答があります。 私はnumpy畳み込みとnumpy cumsumの2つのメソッドを試してみましたが、両方ともサンプルデータセットでうまく動作しましたが、実際のデータには短い配列が生成されました。移動平均は異なる長さの配列を生成しますか?
データは、0.01
で区切られています。この例のデータセットの長さは50
であり、実際のデータは数万である。だから問題を引き起こしているウィンドウサイズについての何かでなければならず、私は関数で何が起こっているのかよく分かりません。
これは私が関数を定義する方法である:
def smoothMAcum(depth,temp, scale): # Moving average by cumsum, scale = window size in m
dz = np.diff(depth)
N = int(scale/dz[0])
cumsum = np.cumsum(np.insert(temp, 0, 0))
smoothed=(cumsum[N:] - cumsum[:-N])/N
return smoothed
def smoothMAconv(depth,temp, scale): # Moving average by numpy convolution
dz = np.diff(depth)
N = int(scale/dz[0])
smoothed=np.convolve(temp, np.ones((N,))/N, mode='valid')
return smoothed
は、その後、私はそれを実装:私は他の機能を使用する場合
scale = 5.
smooth = smoothMAconv(dep,data, scale)
しかしprint len(dep), len(smooth)
戻り81071 80572
と同じ起こります。 データと同じ長さのスムーズな配列を取得するにはどうすればよいですか?
なぜ小規模なデータセットで動作しましたか?異なるスケールを試しても(例とデータで同じものを使用しても)、この例の結果は元のデータと同じ長さになりますが、実際のアプリケーションでは同じ長さになりません。 私はnan
という値の効果を考慮しましたが、例ではnan
の場合は違いはありません。
問題はどこにありますか?可能であれば、完全なデータセットなしで伝えることができますか?
シミュレーションデータ(私の答えの中のランダムな配列など)によって、大きなサイズのデータセットを持つ再現可能な例を含むことができます。 – FTP