【问题标题】: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);

}

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2012-10-30
    • 1970-01-01
    • 2019-02-15
    • 2011-05-23
    • 2014-04-19
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多