форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
39 строки
958 B
Python
39 строки
958 B
Python
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
|