java - 在一个 for 循环中计算整数数组的标准差,而无需提前知道平均值

标签 java math statistics

我有一个数字数组,需要计算其标准差。我想在单个 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)

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

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

最佳答案

根据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);

关于java - 在一个 for 循环中计算整数数组的标准差,而无需提前知道平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61453921/

相关文章:

Matlab 朴素贝叶斯

sql - 生成按订单总数分组的订单统计信息

java.lang.ClassCastException : org. hibernate.type.DateType 无法转换为 org.hibernate.type.VersionType

java - 求和求1000下5的最大倍数

java - 如何转换 Iterator<?将 Person> 扩展到 Iterable?

c++ - 将 3 个轴 vector 转换为轴/角度

c++ - 计算元素相对于相机的位置

java - 单元测试随机数java

java代码计算排序算法的运行时间

java - 如何使用UDP套接字传输jpg图像