Восстановление выборки из частот — это обратная операция к построению частотного массива: по значениям и числу их появлений снова формируется явная выборка. В NumPy это делается векторизованно, без циклов.

Базовая идея:

– есть массив частот counts
– индекс массива = значение
– нужно повторить каждое значение столько раз, сколько указано в частоте

Минимальный пример:

import numpy as np
 
counts = np.array([1, 2, 3])
values = np.arange(len(counts))
 
data = np.repeat(values, counts)

Результат:

[0, 1, 1, 2, 2, 2]

Это ровно та выборка, для которой:

np.bincount(data) == counts

Если значения не начинаются с нуля:

values = np.array([10, 11, 12])
counts = np.array([2, 1, 3])
 
data = np.repeat(values, counts)

Результат:

[10, 10, 11, 12, 12, 12]

Типичный пайплайн:

data → np.bincount → counts
counts → np.repeat → data

Когда это используют:

– для проверки корректности частотных преобразований
– для генерации дискретных выборок по заданному распределению
– для визуализации (гистограммы, эмпирические распределения)

Ограничения и нюансы:

– порядок восстановленных данных не совпадает с исходным
– восстановленная выборка эквивалентна только по распределению
– для больших частот может потребовать много памяти

Коротко:
восстановление выборки из частот в NumPy выполняется через np.repeat, повторяя каждое значение столько раз, сколько указано в его частоте, что даёт выборку, эквивалентную по распределению.