我是初級程序員,正在尋找簡單移動平均SMA的幫助。我正在處理列文件,其中第一個與時間有關,第二個是值。時間間隔是隨機的,也是值。通常這些文件並不大,但是這個過程需要很長時間才能收集數據。最後的文件看起來類似於這樣的:隨機相關時間值的簡單移動平均線
+-----------+-------+ | Time | Value | +-----------+-------+ | 10 | 3 | | 1345 | 50 | | 1390 | 4 | | 2902 | 10 | | 34057 | 13 | | (...) | | | 898975456 | 10 | +-----------+-------+
整個過程的行數約爲60k-100k。
然後我試圖用一些時間窗口「平滑」數據。爲此我使用SMA。 [AWK_method]
awk 'BEGIN{size=$timewindow} {mod=NR%size; if(NR<=size){count++}else{sum-=array[mod]};sum+=$1;array[mod]=$1;print sum/count}' file.dat
爲了更好地實現具有預定義$timewindow
SMA的正確工作的i-創建用零填充線性增量。接下來,我使用不同的$timewindow
運行腳本,並觀察結果。
+-----------+-------+ | Time | Value | +-----------+-------+ | 1 | 0 | | 2 | 0 | | 3 | 0 | | (...) | | | 10 | 3 | | 11 | 0 | | 12 | 0 | | (...) | | | 1343 | 0 | | (...) | | | 898975456 | 10 | +-----------+-------+
對於小數據來說它比較舒適,但現在它相當耗時,並且創建的文件開始太大了。我也熟悉的Gnuplot但SMA有地獄......
因此,這裏是我的問題:
- 是否有可能改變awk的解決方案,以繞過與零填充數據?
- 你是否推薦使用bash的其他解決方案?
- 我也考慮學習python,因爲經過6個月的學習bash,我已經知道它的侷限性。我能否在不創建大數據的情況下在python中解決這個問題?
我會很高興與任何形式的幫助或建議。
此致敬禮!
[AWK_method] http://www.commandlinefu.com/commands/view/2319/awk-perform-a-rolling-average-on-a-column-of-data
該樣本隨機數據的te期望輸出是什麼? –