You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
853 B
44 lines
853 B
package stats |
|
|
|
import "math/rand" |
|
|
|
// Sample returns sample from input with replacement or without |
|
func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error) { |
|
|
|
if input.Len() == 0 { |
|
return nil, EmptyInput |
|
} |
|
|
|
length := input.Len() |
|
if replacement { |
|
|
|
result := Float64Data{} |
|
rand.Seed(unixnano()) |
|
|
|
// In every step, randomly take the num for |
|
for i := 0; i < takenum; i++ { |
|
idx := rand.Intn(length) |
|
result = append(result, input[idx]) |
|
} |
|
|
|
return result, nil |
|
|
|
} else if !replacement && takenum <= length { |
|
|
|
rand.Seed(unixnano()) |
|
|
|
// Get permutation of number of indexies |
|
perm := rand.Perm(length) |
|
result := Float64Data{} |
|
|
|
// Get element of input by permutated index |
|
for _, idx := range perm[0:takenum] { |
|
result = append(result, input[idx]) |
|
} |
|
|
|
return result, nil |
|
|
|
} |
|
|
|
return nil, BoundsErr |
|
}
|
|
|