[英]Can my standard deviation calculation be made more efficient?
我很好奇我的标准偏差方法是否可以提高效率。 通过有效我的意思是快速,并且快速意味着从方法调用到方法返回的延迟。
这是代码:
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);
}
我很感激任何建议。
您可以在一次通过中计算标准偏差。 使用double[]
也会更有效。
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);
}
这是C中此解决方案的转换
传递内存一次可以提高性能。
使用org.apache.commons.math3.stat.descriptive
public double stdDev(ArrayList<Double> input) {
DescriptiveStatistics ds = new DescriptiveStatistics(input.toArray(new Double[0]));
return ds.getStandardDeviation();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.