ssa

Форк
0
/
prctile.go 
58 строк · 1.1 Кб
1
package gopw
2

3
import (
4
	"math"
5
	"sort"
6
)
7

8
// Расчёт процентилей
9
// Не работает ;)
10
func prctile(input []float64, percent float64) float64 {
11
	var percentile float64
12
	length := len(input)
13
	if length == 0 {
14
		return math.NaN()
15
	}
16

17
	if length == 1 {
18
		return input[0]
19
	}
20

21
	if percent <= 0 || percent > 100 {
22
		return math.NaN()
23
	}
24

25
	// Start by sorting a copy of the slice
26
	//c := sortedCopy(input)
27
	sort.Float64s(input)
28

29
	// Multiply percent by length of input
30
	index := (percent / 100) * float64(len(input))
31

32
	// Check if the index is a whole number
33
	if index == float64(int64(index)) {
34

35
		// Convert float to int
36
		i := int(index)
37

38
		// Find the value at the index
39
		percentile = input[i-1]
40

41
	} else if index > 1 {
42

43
		// Convert float to int via truncation
44
		i := int(index)
45

46
		// Find the average of the index and following values
47
		// percentile = Mean([]float64{input[i-1], input[i]}) // Mean(Float64Data{input[i-1], input[i]})
48
		percentile = (input[i-1] + input[i]) / 2
49

50
	} else {
51
		return math.NaN()
52
	}
53

54
	return percentile
55

56
}
57

58
// *****************************************************************************
59

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.