【问题标题】:Calculate standard deviation of an array of integers in one for cycle without knowing average in advance在不事先知道平均值的情况下计算一个整数数组的标准偏差循环
【发布时间】:2020-08-10 17:10:05
【问题描述】:

我有一个数字数组,需要计算其标准差。我想在单个for 循环周期中执行此操作,但我事先不知道数组的平均值:

int[] numbers = new int[] {1, 2, 3, 5};
int sum = 0;
double sumOfSquares = 0;
for (int number: numbers)  {
  sum += number;
  sumOfSquares += number * number; //don't know average yet
}
int average = sum / numbers.length;
double standardDeviation = //?

我知道标准差可以通过以下公式计算:

Formula1: sqrt((each element - average)^2)

但它要求我在遍历数组中的元素时已经知道平均值的值。

还有其他方法吗?我听说还有另一个公式,首先要找到每个元素的平方和,然后在循环结束后应用平均值,但我找不到。

【问题讨论】:

    标签: java math statistics


    【解决方案1】:

    根据Wikipedia,您可以使用一个公式,如果值的数量是有限的并且具有相等的概率(这里似乎就是这种情况),则该公式只需要一个循环。

    int[] numbers = new int[] {1, 2, 3, 5};
    double squareSum = 0;
    double sum = 0;
    
    for (int value : numbers) {
        squareSum += value * value;
        sum += value;
    }
    
    double average = sum / numbers.length;
    double standDev = Math.sqrt(squareSum / numbers.length - average * average);
    

    【讨论】:

    • 正是我想要的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2016-10-31
    • 2015-04-09
    相关资源
    最近更新 更多