package datascience import "math" // Histogram calcula las frecuencias de data distribuidas en la cantidad de buckets indicada. // Retorna un slice de longitud buckets con el conteo de elementos por cada intervalo equiespaciado. func Histogram(data []float64, buckets int) []int { if buckets <= 0 || len(data) == 0 { return make([]int, buckets) } minVal := math.Inf(1) maxVal := math.Inf(-1) for _, v := range data { if v < minVal { minVal = v } if v > maxVal { maxVal = v } } counts := make([]int, buckets) rang := maxVal - minVal if rang == 0 { // Todos los valores son iguales; poner todo en el primer bucket. counts[0] = len(data) return counts } for _, v := range data { idx := int(float64(buckets) * (v - minVal) / rang) if idx >= buckets { idx = buckets - 1 } counts[idx]++ } return counts }