-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathutils.go
67 lines (60 loc) · 1.16 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"math/rand"
"sort"
"strconv"
)
func tryNumCat(a string, index map[string][]int, catStrs []string) []string {
isNumCat := true
cats := make([]int, 0, len(index))
for k := range index {
i64, err := strconv.ParseInt(k, 10, 64)
if err != nil && k != "NA" {
isNumCat = false
break
}
cats = append(cats, int(i64))
}
if isNumCat {
sort.Ints(cats)
for i := range cats {
catStrs[i] = strconv.Itoa(cats[i])
}
if _, ok := index["NA"]; ok {
catStrs[0] = "NA" // there are no negative numerical categories
}
} else {
sort.Strings(catStrs)
}
return catStrs
}
func inList(a string, l []string) bool {
for _, v := range l {
if a == v {
return true
}
}
return false
}
func scaleStd(a [][]float64, j int) {
var mean, variance, n float64
for _, row := range a {
mean += row[j]
n++
}
mean /= n
for _, row := range a {
variance += (row[j] - mean) * (row[j] - mean)
}
variance /= (n - 1)
for _, row := range a {
row[j] = (row[j] - mean) / variance
}
}
func shuffle(a [][]float64, b []float64) {
for i := len(a) - 1; i > 0; i-- {
j := rand.Intn(i + 1)
a[i], a[j] = a[j], a[i]
b[i], b[j] = b[j], b[i]
}
}