我的标准偏差计算可以更有效吗?

d0r*_*ife 4 java statistics performance java-8

我很好奇我的标准偏差方法是否可以更有效。高效是指快速,快速是指从方法调用到方法返回的延迟。

这是代码:

public double stdDev(ArrayList<Double> input) {

    double Nrecip   = ( 1.0 / ( input.size()) );
    double sum      = 0.0;
    double average  = 0.0;

    for (Double input : inputs) {
        average += input;
    } average *= Nrecip;

    for (Double input : inputs) {
        sum += ( (input - average)*(input - average) );
    } sum *= Nrecip;

    return Math.sqrt(sum);

}
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议。

Pet*_*rey 5

您可以一次计算标准偏差。使用 adouble[]也会更有效。

public static double stdDev(double... a) {
    double sum = 0;
    double sq_sum = 0;
    for (int i = 0; i < n; ++i) {
        double ai = a[i];
        sum += ai;
        sq_sum += ai * ai;
    }
    double mean = sum / n;
    double variance = sq_sum / n - mean * mean;
    return Math.sqrt(variance);
}
Run Code Online (Sandbox Code Playgroud)

这是此解决方案在 C 中的转换

传递一次内存可以提高性能。