go-ml.dev/pkg/base@v0.0.0-20200610162856-60c38abac71b/fu/cov.go (about)

     1  package fu
     2  
     3  import "math"
     4  
     5  func Corr(x, y []float32) float64 {
     6  	var X, X2, Y2, Y, XY float64
     7  	for i := range x {
     8  		u := float64(x[i])
     9  		v := float64(y[i])
    10  		X += u
    11  		Y += v
    12  		X2 += u * u
    13  		Y2 += v * v
    14  		XY += u * v
    15  	}
    16  	n := float64(len(x))
    17  	cov := (n*XY - X*Y)
    18  	if math.Abs(cov) < 1e-12 {
    19  		return 0
    20  	}
    21  	return cov / math.Sqrt((n*X2-X*X)*(n*Y2-Y*Y))
    22  }
    23  
    24  func Cord(x, y []float64) float64 {
    25  	var X, X2, Y2, Y, XY float64
    26  	for i := range x {
    27  		u := x[i]
    28  		v := y[i]
    29  		X += u
    30  		Y += v
    31  		X2 += u * u
    32  		Y2 += v * v
    33  		XY += u * v
    34  	}
    35  	n := float64(len(x))
    36  	return (n*XY - X*Y) / math.Sqrt((n*X2-X*X)*(n*Y2-Y*Y))
    37  }