import math def stats(sample): x = list(sample) n = len(x) mn = min(x) mx = max(x) razmah = mx - mn mean = sum(x) / n if n > 1: s = math.sqrt(sum((xi - mean) ** 2 for xi in x) / (n - 1)) else: s = 0.0 if s == 0: ratio = None else: ratio = razmah / s return mn, mx, razmah, s, ratio def intervals(sample, m): mn, mx, razmah, s, ratio = stats(sample) x = sorted(sample) n = len(x) borders = [mn] for k in range(1, m): idx = int(k * n / m) borders.append(x[idx]) borders.append(mx) counts = [0] * m for v in sample: placed = False for i in range(m - 1): if borders[i] <= v < borders[i + 1]: counts[i] += 1 placed = True break if not placed: if borders[m - 1] <= v <= borders[m]: counts[m - 1] += 1 return borders, counts