Randomly generate a matrix of zeros and ones with a non-uniform bias

Can anyone help me to generate a matrix of zeros and ones randomly without uniformly distributing like the function of "randint". Instead with the number of ones must be larger than zeros in an array.
For example, a matrix like this:
A= [ 1 1 1 1 0 1 0, 1 0 1 1 1 1 1, 1 1 0 1 1 0 0]

 Akzeptierte Antwort

Like this?
A = rand(1,21)>.3 % Increase number for less ones, decrease for more.

2 Kommentare

Hi Matt, for the time being, i'm using your solution as it could give the ones more than zeros.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

The following gives you a matrix with exactly a certain number of 1's
sizeR = [3 4] ;
num1 = 8 ;
R = zeros(sizeR) % set all to zero
ix = randperm(numel(R)) % randomize the linear indices
ix = ix(1:num1) % select the first
R(ix) = 1 % set the corresponding positions to 1
By the way, if the only values in R are 0 and 1 than logical arrays may be worthwhile to explore, as they are less memory consuming than double arrays.

7 Kommentare

Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]
Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]
Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]
Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]
Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]
Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]
Thanks, this was very helpful. Is there a way to make these ones being adjacent elements? example for 6x3 matrix with two 1's: [1 1 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0]

Melden Sie sich an, um zu kommentieren.

0 + (rand(7,3) > 0.4)

1 Kommentar

Not that matter, but in light of the recent discussion, in order to generate a 0.4 probability of zeros, the more accurate RAND() cut is:
s = 2^(-53)
cut = 0.4*(1-s)+s/2
r = rand > cut

Melden Sie sich an, um zu kommentieren.

Nurul
Nurul am 11 Feb. 2011

0 Stimmen

Thanks for your help. Its helped me a lot.

Kategorien

Gefragt:

am 11 Feb. 2011

Kommentiert:

am 13 Mai 2020

Community Treasure Hunt

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

Start Hunting!

Translated by