123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package gago
- import (
- "math"
- )
- func newInts(n int) []int {
- var ints = make([]int, n)
- for i := range ints {
- ints[i] = i
- }
- return ints
- }
- // Divide each element in a float64 slice by a given value.
- func divide(floats []float64, value float64) []float64 {
- var divided = make([]float64, len(floats))
- for i, v := range floats {
- divided[i] = v / value
- }
- return divided
- }
- // Compute the cumulative sum of a float64 slice.
- func cumsum(floats []float64) []float64 {
- var summed = make([]float64, len(floats))
- copy(summed, floats)
- for i := 1; i < len(summed); i++ {
- summed[i] += summed[i-1]
- }
- return summed
- }
- // Find the minimum between two ints.
- func min(a, b int) int {
- if a <= b {
- return a
- }
- return b
- }
- // Compute the sum of an int slice.
- func sumInts(ints []int) (sum int) {
- for _, v := range ints {
- sum += v
- }
- return
- }
- // Compute the sum of a float64 slice.
- func sumFloat64s(floats []float64) (sum float64) {
- for _, v := range floats {
- sum += v
- }
- return
- }
- // Compute the minimum value of a float64 slice.
- func minFloat64s(floats []float64) (min float64) {
- min = math.Inf(1)
- for _, f := range floats {
- if f < min {
- min = f
- }
- }
- return
- }
- // Compute the maximum value of a float64 slice.
- func maxFloat64s(floats []float64) (max float64) {
- max = math.Inf(-1)
- for _, f := range floats {
- if f > max {
- max = f
- }
- }
- return
- }
- // Compute the mean of a float64 slice.
- func meanFloat64s(floats []float64) float64 {
- return sumFloat64s(floats) / float64(len(floats))
- }
- // Compute the variance of a float64 slice.
- func varianceFloat64s(floats []float64) float64 {
- var (
- m = meanFloat64s(floats)
- ss float64
- )
- for _, x := range floats {
- ss += math.Pow(x-m, 2)
- }
- return ss / float64(len(floats))
- }
- type set map[interface{}]bool
- // union merges two slices and ignores duplicates.
- func union(x, y set) set {
- var (
- u = make(set)
- blackList = make(map[interface{}]bool)
- )
- for i := range x {
- u[i] = true
- blackList[i] = true
- }
- for i := range y {
- if !blackList[i] {
- u[i] = true
- blackList[i] = true
- }
- }
- return u
- }
|