java - 使用 Java 计算标准差?

标签 java math arraylist standard-deviation

我有一个整数 ArrayList:[11, 15, 10, 19, 9, 1, 2, 16] 我似乎无法返回正确的答案。

我的代码:

static double Q2(ArrayList<Integer> input) {
    Collections.sort(input);

    ArrayList<Double> input2 = new ArrayList<>();
    double sum = 0;
    double sum2 = 0;
    double sd = 0;

    for (int i = 0; i < input.size(); i++) {
        sum = sum + input.get(i);
    }

    double mean = sum / input.size();

    for (int i = 0; i < input.size(); i++) {
        input2.add((Math.pow((input.get(i) - mean), 2)));
    }

    for (int i = 0; i < input2.size(); i++) {
        sum2 = sum2 + input2.get(i);
    }

    double mean2 = sum2 / input2.size();

    sd = Math.sqrt(mean2);

    return sd;

预期输出应为:5.998697775350913

我的输出是:6.010407640085654

感谢您抽出宝贵的时间,非常感谢。

最佳答案

虽然在数学上是正确的,但从计算角度来看,这是一种糟糕的计算 SD 的方法。无需先对输入进行排序。无需创建第二个数组来存储平方偏差;您只需在一个循环中添加它们即可。无需调用 Math.Pow,而只需计算 z * z。

解决所有这些问题,您就可以尽可能地改进这种方法。但更好的方法是使用 online algorithm ,可以一次性完成。

最后,请注意,在很多情况下,当人们要求您计算 SD 时,他们实际上想要的是总体 SD,而不是样本 SD,这需要您将偏差平方和除以 (n-1),而不是

关于java - 使用 Java 计算标准差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264797/

相关文章:

java - Java 类中方法和字段访问修饰符的简写?

java - 使用 testNG 将 test 内的数据提供者元素作为数组进行利用

c# - 使一个值的 50% 成为另一个变量的最大值(0%/100% 等于最小值)

php - RP游戏的经验值跳跃和练级

java - 使用 replaceWith 时避免 JSoup 生成空格

java - 在浏览器中运行小程序

C#:如何对整数进行四舍五入的简单数学运算?

java - Android ArrayList,意外停止

java - 将 String 中不存在的元素添加到 ArrayList<String>

c - 为什么它显示两个数组而不是一个数组