【问题标题】:How can I calculate the variance?如何计算方差?
【发布时间】:2020-02-05 05:05:53
【问题描述】:
如何用迭代器计算方差?
public static double variance(final Iterator<Integer> array) {
}
-此方法计算平均值
private static double mean(final List<Integer> array) {
return array.stream()
.mapToInt(Integer::intValue)
.average()
.orElse(Double.NaN);
}
【问题讨论】:
标签:
java
arrays
iterator
variance
【解决方案1】:
基于此answer,您可以这样做:
public static double variance(final Iterator<Integer> iterator) {
List<Integer> array = new ArrayList<>();
iterator.forEachRemaining(array::add);
double mean = mean(array);
double temp = 0;
for(double a :array)
temp += (a-mean)*(a-mean);
return temp/(array.size()-1);
}
但奇怪的是在mean 中使用了List。如果不需要此Iterator,则可以:
public static double variance(final List<Integer> array) {
double mean = mean(array);
double temp = 0;
for(double a :array)
temp += (a-mean)*(a-mean);
return temp/(array.size()-1);
}
还有stream
public static double variance(final Iterator<Integer> iterator) {
List<Integer> array = new ArrayList<>();
iterator.forEachRemaining(array::add);
double mean = mean(array);
return array.stream()
.map(a -> (a-mean)*(a-mean))
.reduce(0d, Double::sum)/(array.size()-1);
}