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

     1  package fu
     2  
     3  import "math"
     4  
     5  func Meanr(a []float32) float32 {
     6  	var c float64
     7  	for _, x := range a {
     8  		c += float64(x)
     9  	}
    10  	return float32(c / float64(len(a)))
    11  }
    12  
    13  func Mse(a, b []float32) float32 {
    14  	var c float64
    15  	for i, x := range a {
    16  		q := float64(x - b[i])
    17  		c += q * q
    18  	}
    19  	return float32(c / float64(len(a)))
    20  }
    21  
    22  func Flatnr(a [][]float32) []float32 {
    23  	n := 0
    24  	for _, x := range a {
    25  		n += len(x)
    26  	}
    27  	r := make([]float32, n)
    28  	i := 0
    29  	for _, x := range a {
    30  		copy(r[i:i+len(x)], x)
    31  		i += len(x)
    32  	}
    33  	return r
    34  }
    35  
    36  func MinMaxr(a []float32) (float32, float32) {
    37  	min := a[0]
    38  	max := a[0]
    39  	for _, x := range a[1:] {
    40  		if x > max {
    41  			max = x
    42  		} else if x < min {
    43  			min = x
    44  		}
    45  	}
    46  	return min, max
    47  }
    48  
    49  func Avgr(a []float32) float32 {
    50  	var c float64
    51  	for _, x := range a {
    52  		c += float64(x)
    53  	}
    54  	return float32(c / float64(len(a)))
    55  }
    56  
    57  func Absr(a float32) float32 {
    58  	if a >= 0 {
    59  		return a
    60  	}
    61  	return -a
    62  }
    63  
    64  func Sigmar(a []float32) float64 {
    65  	return math.Sqrt(Varr(a))
    66  }
    67  
    68  func Varr(a []float32) float64 {
    69  	var m float64
    70  	for _, x := range a {
    71  		m += float64(x)
    72  	}
    73  	m /= float64(len(a))
    74  	var s float64
    75  	for _, x := range a {
    76  		q := float64(x) - m
    77  		s += q * q
    78  	}
    79  	s /= float64(len(a))
    80  	return s
    81  }