Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
219 views
in Technique[技术] by (71.8m points)

java - How can I calculate the variance?

how can I calculate the variance with iterator?

public static double variance(final Iterator<Integer> array) {

}

-this method calculate the average

 private static double mean(final List<Integer> array) {
        return array.stream()
        .mapToInt(Integer::intValue)
        .average()
        .orElse(Double.NaN);
    }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Based on this answer you can do:

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);
}

But it is strange that in mean is used List. If this Iterator is not needed than it can be:

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);
}

And with 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);

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...