计算标准差,只需要调用Math函数,和Linq的求平均、求和函数就够了,具体实现如下:
public static void Main(string[] args)
{
double[] array = new[] {60d, 21d, 30d, 10d, 40d};
double stdDev = CalculateStdDev(array);
Console.WriteLine(stdDev);
Console.Read();
}
private static double CalculateStdDev(IEnumerable<double> values)
{
double ret = 0;
if (values.Count() > 0)
{
// 计算
平均数 double avg = values.Average();
// 计算各数值与平均数的差值的平方,然后求和
double sum = values.Sum(d => Math.Pow(d - avg, 2));
// 除以数量,然后开方
ret = Math.Sqrt(sum / values.Count());
}
return ret;
}
追问谢谢大神!还有个问题就是我现在用的是System.Collections.ArrayList数组,请问下怎么转换成你使用的那个IEnumerable?
追答用Linq转换:
ArrayList list = new ArrayList();
var array = list.ToArray().Select(Convert.ToDouble);
array就是IEnumerable<double>类型