Претеглена проба в октава

Търсих навсякъде и нищо не намерих. Има ли някакъв начин за изпълнение на претеглена проба в 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