此代码让用户输入5个数字,存储在数组中,并计算出平均值
double average;
double variance;
int i;
int[] arr = new int[5]; // 5 size array
for (i = 0; i < 5; i++)
{
Console.Write("\n Enter your number:\t");
arr[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("\n");
average = arr.Sum() / 5.0;
Console.WriteLine("\n The average is {0}", average);
Console.ReadLine();
我正在尝试计算方差,即(数字 - 平均值)*(数字 - 平均值)。
但是我不确定如何从阵列中提取每个数字并执行此计算?
任何帮助非常感谢
答案 0 :(得分:8)
您可以按如下方式获得标准偏差:
double average = arr.Average();
double sumOfSquaresOfDifferences = arr.Select(val => (val - average) * (val - average)).Sum();
double sd = Math.Sqrt(sumOfSquaresOfDifferences / arr.Length);
答案 1 :(得分:1)
制作扩展方法..未经测试但如果WebDriver specification正确
则应该有效static class MathsExtensions
{
public static double GetVariance(this double[] values)
{
var avg = values.Average();
return values.Select(value => (value - avg) * (value - avg)).Sum() / values.Count();
}
}
刚给它一点测试。
double[] arr = { 8, 7, 9, 10, 6 };
Console.WriteLine(arr.GetVariance());
Console.ReadLine();
它返回2 - 根据我的链接 - 是正确的。
如果你下一次有类似的问题,你应该像谷歌“如何计算方差”,然后根据理论创建你的算法。 但如果确实存在解决方案,则alaways会查找