所以我使用这种方法来计算我的数组的标准差,但它似乎没有给我正确的值。
double numbers[] = new double[10];
double sumOfAllItems = 0;
private double total()
{
for (int i = 0; i < numbers.Length; i++)
{
sumOfAllItems += numbers[i];
}
return sumOfAllItems;
}
public double mean()
{
// working
**sumOfAllItems = 0;**
return total() / numbers.Length;
}
// numbers are from (1-10) (too lazy to type up all of them.
public double variance()
{
// each (value - mean) squared
double summationsTotal = 0; // (numbers[i] - mean() squared
for (int i = 0; i < numbers.Length; i++)
{
summationsTotal += Math.Pow(numbers[i] - mean(), 2);
}
return summationsTotal / (numbers.Length - 1);
}
我手动计算了方差,结果是 9.166666。这是用于示例公式。
但是,当我在我的 GUI 上计算它时,它却给了我 866.25。这段代码有什么问题吗?
最佳答案
问题出在这里:
double sumOfAllItems = 0;
private double total()
{
for (int i = 0; i < numbers.Length; i++)
{
sumOfAllItems += numbers[i];
}
return sumOfAllItems;
}
应该是:
double sumOfAllItems = 0;
private double total()
{
sumOfAllItems = 0;
for (int i = 0; i < numbers.Length; i++)
{
sumOfAllItems += numbers[i];
}
return sumOfAllItems;
}
缓存均值而不是在方差函数中重新计算它也会更有效 - 它不会改变。像这样的东西:
public double variance()
{
// each (value - mean) squared
double dMean - mean();
double summationsTotal = 0; // (numbers[i] - mean() squared
for (int i = 0; i < numbers.Length; i++)
{
summationsTotal += Math.Pow(numbers[i] - dMmean, 2);
}
return summationsTotal / (numbers.Length - 1);
}
关于c# - 标准偏差计算在 C# 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755094/