方差的计算,如果不太计较精度的话,可以使用 Apache 的 commons-math3(http://commons.apache.org/proper/commons-math/)提供的 Variance 类。不过毕竟 Variance 是使用 double 进行计算,会有精度损失,所以自己写了个计算方差的工具类,采用 BigDecimal 进行计算,并且可以自己指定精度值,代码如下:
该工具类是使用最基本的方差计算公式进行计算的,如果要使用流式方式计算方差,可以参考以下文章:
https://zhuanlan.zhihu.com/p/48025855
package com.frank.test.variance;
import java.math.BigDecimal;
import com.google.common.base.Preconditions;
/**
* 方差计算工具类。
*
* @author frank
*/
public final class VarianceUtils {
/**
* 默认精度
*/
private static final int DEFAULT_SCALE = 64;
private VarianceUtils() {}
public static BigDecimal variance(byte[] arr) {
Preconditions.checkNotNull(arr);
String[] strArr = new String[arr.length];
for (int i = 0; i < arr.length; i++) {
strArr[i] = String.valueOf(arr[i]);
}