如何从列表中获取均值,中位数和标准差

时间:2019-04-02 05:53:23

标签: c#

是否可以从列表中获取均值,中位数和标准差结果。 这是我需要计算的初始代码:

var myList = new List<List<double>>();

myList.Add(new List<double> { 1, 3, 6, 8});
myList.Add(new List<double> { 1, 2, 3, 4});
myList.Add(new List<double> { 1, 4, 8, 12});

预期结果是仅获取第一个索引和最后一个索引的均值,中位数和标准差:

Mean:   1, 8
Median: 1, 8
Stdev:  0, 3.265986324

我试图循环列表以获取平均值,但不确定这是否是最佳方法:

 foreach(var i in myList )
            {
                Console.WriteLine(i[0].Average());
            }

任何建议/评论TIA

2 个答案:

答案 0 :(得分:2)

这将帮助您入门,展示如何计算Average。请注意,使用FirstLast从每个子列表中获取第一个/最后一个条目。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            var myList = new List<List<double>>();

            myList.Add(new List<double> { 1, 3, 6, 8 });
            myList.Add(new List<double> { 1, 2, 3, 4 });
            myList.Add(new List<double> { 1, 4, 8, 12 });

            var averageFirst= myList.Select(z => z.First()).Average();
            var averageLast = myList.Select(z => z.Last()).Average();

            Console.WriteLine(averageFirst);
            Console.WriteLine(averageLast);

            Console.ReadLine();
        }
    }
}

答案 1 :(得分:0)

@mjwills(第一个和最后一个)一起生病

这就是说

var listOfFirstValues = myList.Select(z => z.First()).ToList();
var listOfLastValues = myList.Select(z => z.Last()).ToList();

平均值

var mean = myList.Average(); 

中位数:数字排序列表的中间

public double Median(List<double> numbers)
{
   if (numbers.Count == 0)
      return 0;

   numbers = numbers.OrderBy(n=>n).ToList(); 

   var halfIndex = numbers.Count()/2; 

   if (numbers.Count() % 2 == 0)
     return (numbers[halfIndex] + numbers[halfIndex - 1]) / 2.0;

   return numbers[halfIndex];
}

标准偏差,该值表示组中的成员与该组的平均值相差多少

private double CalculateStdDev(List<double> values)
{  
   if (values.Count == 0)
      return 0;

   var avg = values.Average();  
   var sum = values.Sum(d => Math.Pow(d - avg, 2));   
   return Math.Sqrt(sum / (values.Count()-1));
}

注意 :完全未经测试,并且没有任何健全性检查