簡體   English   中英

您如何計算 C# 中給定數據集的移動平均值?

[英]How do you compute for the moving average of a given dataset in C#?

所以我使用一個隨機生成的數據集,我需要找到用戶輸入的樣本大小的移動平均值。 例如,數據集是一個包含 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 的列表,用戶輸入的樣本量為 2。程序必須首先計算:1和 2 = 1.5、2 和 3 = 2.5、3 和 4 = 3.5,以此類推。 我該怎么做呢? 謝謝!

您可以跟蹤總和並將所有值排隊,這樣您就知道在達到樣本大小后要從總和中減去什么。

public static IEnumerable<decimal> MovingAverages(IEnumerable<decimal> values, int sample)
{
    var queue = new Queue<decimal>(sample);
    decimal sum = 0;
    foreach(var x in values)
    {
        sum += x;
        queue.Enqueue(x);
        if(queue.Count == sample)
        {
            yield return sum / sample;
            sum -= queue.Dequeue();
        }
    }
}

基本上這會將前 n 個值(等於樣本)和總和排隊。 一旦獲得所需數量的值進行平均,它就會產生總和除以樣本大小,然后從隊列中刪除最舊的值並從總和中減去它。 請注意,如果樣本大小大於值的數量,這將返回一個空的可枚舉。

這可以通過一個簡單的循環來完成。

for (int i = 0; i <= array.Length - samplesize; i++)
    Console.WriteLine(array.Skip(i).Take(samplesize).Average());

Skip(i).Take(samplesize)部分僅選擇您目前感興趣的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM