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 }