github.com/Anderson-Lu/gobox@v0.0.0-20191127065433-3e6c4c2da420/number/variance.go (about)

     1  package number
     2  
     3  import "math"
     4  
     5  type Variance interface {
     6  	Len() int
     7  	Get(i int) float64
     8  }
     9  type Avg Variance
    10  
    11  //计算方差
    12  func CalcVariance(data Variance) float64 {
    13  	n := data.Len()
    14  	if n == 0 {
    15  		return 0.0
    16  	}
    17  	avg := CalcAverage(data.(Avg))
    18  	sum := 0.0
    19  	for i := 0; i < n; i++ {
    20  		sum += math.Pow((data.Get(i) - avg), 2)
    21  	}
    22  	return sum / float64(n)
    23  }
    24  
    25  //计算平均数
    26  func CalcAverage(data Avg) float64 {
    27  	n := data.Len()
    28  	if n == 0 {
    29  		return 0.0
    30  	}
    31  	x := 0.0
    32  	for i := 0; i < n; i++ {
    33  		x += data.Get(i)
    34  	}
    35  	return x / float64(n)
    36  }