Asked by Aftab Ahmed Khan
on 25 Feb 2015

Hello Everyone, I am using this one line of code to generate a single value either to be 1 or 2 with equal probability but my question is that how can i select the value to be 1 with 60% probability and the value to be 2 with 40% probability ? Thank you.

select=randi(2,1,1);

Answer by Torsten
on 25 Feb 2015

Accepted Answer

x=rand;

if x<0.6

select=1;

else

select=2;

end

Best wishes

Torsten.

Aftab Ahmed Khan
on 25 Feb 2015

Thank you all for the response. Take care.

Sign in to comment.

Answer by pankaj singh
on 10 Mar 2018

The simplest technique is to use inbuilt Matlab function 'randscr'.

Suppose you want to generate M by N matrix of W, X, Y, and Z with probabilities i,j,k, and l. Then use

out = randsrc(M,N,[W,X,Y,Z;i,j,k,l]); % i+j+k+l = 1;

In your case, as you want a single value to be generated, your M x N = 1 x 1 matrix; the values are 1 with 60% probability (i.e. 0.6) and 2 with 40% (i.e. 0.4) probability, therefore use this;

out = randsrc(1,1,[1,2;0.6,0.4]);

Note that the above is just an example. You can create any matrix size with any number of values. The sum of probabilities must be equal to 1.

Sign in to comment.

Answer by Daniel
on 25 Feb 2015

You can use rand, which gives uniform distribution and look if the number is below or above 0.6.

if(0.6 <= rand()){

select = 1;

} else {

select = 2;

}

That should give 60/40 chances. There are more elegant ways to do that though.

Trung Khoa Le
on 17 Jan 2019

Luciano Anastassiou
on 22 May 2019

Hi Trung Khoa Le,

The intuition is simply that "rand" generates a random number between 0 and 1. Then when you apply the "if" constraint, you are telling the system to only give out the result "select = 1" when that random number is below 0.6. Otherwise it will give out "select = 2".

If you repeated this 1000s of times, it would give out "select = 1" 60% of the time, because 60% of those random numbers between 0 and 1 will be below 0.6, and the other 40% of the time it will give out "select = 2".

Sign in to comment.

Answer by Jos (10584)
on 25 Feb 2015

Edited by Jos (10584)
on 25 Feb 2015

For two values it is simple

VAL = [10 20] % 2 values

P = .8 % probabbility of selecting first value

Ndraw = 20 % number of draws

R = rand(Ndraw,1) < P

SEL = VAL(2 - R) % use as index into VAL

For more complicated cases you might be interested inTake a look at my RANDP function, which picks random values with relative probabilities.

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.