C# LINQで移動平均
LINQを使った,移動平均を計算する関数.
ソースコード
/// <summary> /// 移動平均を格納した配列を返す /// </summary> /// <param name="data">入力データ</param> /// <param name="num">何個分の平均をとるか</param> /// <returns>移動平均をとったデータ</returns> List<double> MovingAverage( List<double> data, int num) { return Enumerable.Range(0, data.Count - num) .Select(i => data.Skip(i).Take(num).Average()) .ToList(); }
LINQの練習用なので効率が良いかとかは知らない.
Enumerable.Range(0, data.Count - num)
で,0~総データ数-平均を求めるときのデータの個数までの整数のシーケンスを生成する.
data.Skip(i).Take(num).Average()
で,入力データのi番目のデータからnum個データを抽出して平均をとる.
その他
FIRフィルタは以下の記事.
C# LINQでFIRフィルタ - whoopsidaisies's diary