Easy question with probability

1 view (last 30 days)
Steven
Steven on 7 Dec 2011
Answered: Roger Stafford on 18 Mar 2017
Hi,
Let's say
P = [0.1 0.3 0.4 0.2]
X = [1 2 3 4]
where P(n) is the probability to select the X(n) element. I wish to make a function that select an "random" element of X according to its probability, like
f = myfun(P,X)
>> f = 2
thx a lot

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 7 Dec 2011
function F = myfun(P,X)
x = cumsum([0 P(:).'/sum(P(:))]);
x(end) = 1e3*eps + x(end);
[a a] = histc(rand,x);
F = X(a);
  5 Comments
Oleg Komarov
Oleg Komarov on 7 Dec 2011
Andrei's function should read:
function F = myfun(P,X)
p = cumsum([0; P(1:end-1).'; 1+1e3*eps]);
[a a] = histc(rand,p);
F = X(a);
Jyotshna Ramashire
Jyotshna Ramashire on 18 Mar 2017
can you please explain the codes?

Sign in to comment.

More Answers (1)

Roger Stafford
Roger Stafford on 18 Mar 2017
Also a little late, this also works:
C = cumsum(P);
f = X(1+sum(C(end)*rand>C));

Categories

Find more on Performance and Memory in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!