繁体   English   中英

使用Java计算标准偏差?

[英]Calculate Standard Deviation using Java?

我有一个整数的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。

修复所有问题,您将尽最大可能改进此方法。 但是,更好的方法完全是使用在线算法 ,该算法可以一次性完成。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM