MATLAB Answers

How to pick a value according to its probability

242 views (last 30 days)
Let's say
P = [0.1 0.3 0.4 0.2]
X = [1 2 5 9]
where P(n) is the probability to select the X(n) element. I wish to make a function that select a "random" element of X according to its probability, like
f = myfun(P,X)
>> f = 2 (occurs around 30%)
thx a lot


Nikolas Spiliopoulos
Nikolas Spiliopoulos on 3 Nov 2016
what if we have two numbers? Lets say 50% probability to get a=0.05 and b= -0.05
Sorry I am a very beginner in MATLAB
thanks in advance

Sign in to comment.

Accepted Answer

Sean de Wolski
Sean de Wolski on 7 Dec 2011
f = X(find(rand<cumsum(P),1,'first'))

  1 Comment

Walter Roberson
Walter Roberson on 7 Dec 2011
The answers in the other thread took care in case cumsum(P) < 1 as can happen due to round-off error.

Sign in to comment.

More Answers (1)

Jonathan on 3 Sep 2018
Edited: Jonathan on 3 Sep 2018
The accepted answer is not doing any sanity check, and is sensitive to rounding errors. You should use randsample instead.
To sample n points from X, with replacement, and probabilities P:
randsample( X, n, true, P )
This can also be used with a custom RandStream (see documentation). Be aware that this function does NOT check for negative values in P; check manually if needed.

  1 Comment

Sepehr Saadatmand
Sepehr Saadatmand on 11 Oct 2019
That was what I was looking for. Thank you !

Sign in to comment.

Sign in to answer this question.