如何计算标准差[数组]

Ind*_*ent 26 .net c# algorithm

double[] someDoubles = { 34.6, 45.1, 55.5, 78.5, 84.66, **1400.32**, 99.04, 103.99 };
Run Code Online (Sandbox Code Playgroud)

上面的代码是累积算法的意外行为的简短样本(请参阅粗体值).实际上,这是一个类,它还包含每个值的日期.

C#计算偏差?排序打破累积链的行的算法?

建议有帮助,

[插入]

为了澄清,这是关于
性能在这个主题上非常重要的三件事.

第一种: 如果值遵循累积模式,则快速扫描.
第二:检查所有值是否合理偏差.
第三: 指出并进行错误处理.

这个问题是关于第一个和第二个问题.

San*_*ath 65

使用lambdas

double average = someDoubles.Average();
double sumOfSquaresOfDifferences = someDoubles.Select(val => (val - average) * (val - average)).Sum();
double sd = Math.Sqrt(sumOfSquaresOfDifferences / someDoubles.Length); 
Run Code Online (Sandbox Code Playgroud)

sd变量将具有标准偏差.

如果你有sd,那么List<double>在最后一行使用代码代替someDoubles.Count.

  • 因为这是人口的*样本*而不是整个人口,你应该执行:`Math.Sqrt(sumOfSquaresOfDifferences /(someDoubles.Length - 1));`(感谢Ella). (11认同)
  • 由于`Sum`也采用谓词,你可以使用`double sumOfSquaresOfDifferences = someDoubles.Sum(val =>(val-average)*(val-average));`` (7认同)

jb.*_*jb. 14

要计算标准偏差,您可以使用此代码.直接取自Victor Chen在C#中计算双变量的标准偏差.

private double getStandardDeviation(List<double> doubleList)  
{  
   double average = doubleList.Average();  
   double sumOfDerivation = 0;  
   foreach (double value in doubleList)  
   {  
      sumOfDerivation += (value) * (value);  
   }  
   double sumOfDerivationAverage = sumOfDerivation / (doubleList.Count - 1);  
   return Math.Sqrt(sumOfDerivationAverage - (average*average));  
}  
Run Code Online (Sandbox Code Playgroud)

链接指向Victor的网站不再有效,但仍包含在内以帮助维护归属.

  • 更好地替换字符串"sumOfDerivation + =(value)*(value);"with"sumOfDerivation + =(value-average)*(value-average);"和最后一个字符串没有"(average*average)" (3认同)
  • *user1575120* 是对的。尽管在数学上是正确的,但这个方程对于现实世界的数值计算来说是非常错误的,因为它很容易溢出。该错误出现在 *Microsoft Excel* 和 *Free Pascal Compiler* 中。有关后者,请参阅我的[错误报告](https://bugs.freepascal.org/view.php?id=32804)。 (2认同)