【发布时间】:2016-07-11 05:05:33
【问题描述】:
我很好奇我的标准差方法是否可以提高效率。高效是指快速,快速是指从方法调用到方法返回的延迟。
代码如下:
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);
}
如果有任何建议,我将不胜感激。
【问题讨论】:
-
你可以做
average += Nrecip*input;,但这不会让任何事情变得更快 -
您可以使用
double而不是Double并使用一小部分内存。 -
只计算一次
(input - average)而不是两次? -
只使用一个for循环并使用
Var(X) = E[ (X-E[X])² ] = E[X²] - (E[X])²这一事实
标签: java performance statistics java-8