Взвешенная выборка в октаве

Я искал везде и ничего не нашел. Есть ли способ выполнить взвешенный сэмпл в Octave?

То есть, если у нас есть два вектора e и v, где sum(v) = 1, способ выборки n элементов из e с вероятностями v.


person carllacan    schedule 26.07.2014    source источник


Ответы (1)


Вы хотите определить индекс в соответствии с вероятностью в векторе «v», а затем выберите соответствующий индекс в «e». Таким образом, вам нужно использовать выборку с обратным преобразованием. Простой способ сделать это, например:

    clear
    close all

    e = [10 20 30 40 50];
    v = [0.1 0.2 0.5 0.1 0.1];

    cdf = cumsum(v);

    n = 1000;

    E = [];
    for i=1:n
      r = rand;
      idx = find(cdf>r);
      E = [E e( idx(1) )];
    end

    hist(E)
person xiawi    schedule 28.07.2014
comment
Ах да, я пытался что-то подобное, но я использовал v вместо cumsum(v). Спасибо за совет! - person carllacan; 29.07.2014