是否可以从列表中获取均值,中位数和标准差结果。 这是我需要计算的初始代码:
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
答案 0 :(得分:2)
这将帮助您入门,展示如何计算Average
。请注意,使用First
或Last
从每个子列表中获取第一个/最后一个条目。
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));
}
注意 :完全未经测试,并且没有任何健全性检查