У меня есть постоянное количество выборок, каждая из которых имеет вероятность.Теперь я хочу сделать повторную выборку из этого источника данных, чтобы получить такое же количество новых выборок, каждая из которых имеет одинаковую вероятность.
Например:
random | 0.03 | 0.78 | 0.45 | 0.70
-------+------+------+------+------
sample | 0000 | 0001 | 0002 | 0003 RNG sample | 0000 | 0003 | 0002 | 0003
-------+------+------+------+------ ====> -------+------+------+------+------
prob. | 0.10 | 0.20 | 0.30 | 0.40 prob. | 0.25 | 0.25 | 0.25 | 0.25
В этом случае вероятности будут даны не напрямую, а в виде весов.Однако вероятности могут быть напрямую получены из весов, поскольку сумма всех весов известна (но не постоянна).
В реализации MATLAB я использовал функцию randsample статистикиНабор инструментов для выполнения этого процесса повторной выборки:
y = randsample(n,k,true,w)
или y = randsample(population,k,true,w)
возвращает взвешенную выборку, взятую с заменой, используя вектор положительных весов w
, длина которого n
.Вероятность того, что целое число i
выбрано для записи y
, составляет w(i)/sum(w)
.Обычно w
- это вектор вероятностей.randsample
не поддерживает взвешенную выборку без замены.
function [samples probabilities] = resample(samples, probabilities)
sampleCount = size(samples, 1);
indices = randsample(1 : samplecount, samplecount,
true, probabilities);
samples = samples(indices, :);
probabilities = repmat(1 / sample count, samplecount, 1);
end
Теперь я хочу перенести эту часть алгоритма на iPad 2, где он используется для обновления в реальном времени (~ 25 кадров в секунду)данные, в которых 512 выборок пересчитываются.Следовательно, экономия времени имеет решающее значение, так как будут выполняться и другие расчеты.Память не нужно минимизировать.
Я рассмотрел метод псевдонима , однако кажется, что процесс построения структуры довольно утомителен и, возможно, не самое эффективное решение.
Существуют ли какие-либо другие эффективные методы, которые удовлетворяли бы требованию в реальном времени, или метод Alias - путь?