forked from glycerine/gostat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstat_util.go
94 lines (81 loc) · 1.69 KB
/
stat_util.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package gostat
import (
"math"
)
var fZero float64 = float64(0.0)
var fOne float64 = float64(1.0)
var iZero int64 = int64(0)
var iOne int64 = int64(1)
var negInf float64 = math.Inf(-1)
var log func(float64) float64 = math.Log
var exp func(float64) float64 = math.Exp
var sqrt func(float64) float64 = math.Sqrt
var pow func(float64, float64) float64 = math.Pow
const π = float64(math.Pi)
func RejectionSample(targetDensity func(float64) float64, sourceDensity func(float64) float64, source func() float64, K float64) float64 {
x := source()
for ; NextUniform() >= targetDensity(x)/(K*sourceDensity(x)); x = source() {
}
return x
}
func ShuffleInt64(x []int64) {
n := int64(len(x))
for i := iZero; i < n; i++ {
j := i + NextRange(n-i)
t := x[i]
x[i] = x[j]
x[j] = t
}
}
func ShuffleFloat64(x []float64) {
n := int64(len(x))
for i := iZero; i < n; i++ {
j := i + NextRange(n-i)
t := x[i]
x[i] = x[j]
x[j] = t
}
}
func Shuffle(x []interface{}) {
n := int64(len(x))
for i := iZero; i < n; i++ {
j := i + NextRange(n-i)
t := x[i]
x[i] = x[j]
x[j] = t
}
}
func maxFloat64(x []float64) float64 {
first := x[0]
if len(x) > 1 {
rest := maxFloat64(x[1:len(x)])
if rest > first {
first = rest
}
}
return first
}
func maxInt64(x []int64) int64 {
first := x[0]
if len(x) > 1 {
rest := maxInt64(x[1:len(x)])
if rest > first {
first = rest
}
}
return first
}
func copyInt64(x []int64, n int64) []int64 {
newx := make([]int64, n)
for i := 0; i < len(x) && i < int(n); i++ {
newx[i] = x[i]
}
return newx
}
func copyFloat64(x []float64, n int64) []float64 {
newx := make([]float64, n)
for i := 0; i < len(x) && i < int(n); i++ {
newx[i] = x[i]
}
return newx
}