読者です 読者をやめる 読者になる 読者になる

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