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

26 vues (au cours des 30 derniers jours)
Nurul
Nurul le 11 Fév 2011
Commenté : Jack Nelson le 13 Mai 2020
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]

Réponse acceptée

Matt Fig
Matt Fig le 11 Fév 2011
Like this?
A = rand(1,21)>.3 % Increase number for less ones, decrease for more.
  2 commentaires
Nurul
Nurul le 16 Fév 2011
Hi Matt, for the time being, i'm using your solution as it could give the ones more than zeros.
Jack Nelson
Jack Nelson le 13 Mai 2020
Thanks! :)

Connectez-vous pour commenter.

Plus de réponses (3)

Jos (10584)
Jos (10584) le 11 Fév 2011
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 commentaires
Nima Mahanfar
Nima Mahanfar le 17 Juin 2015
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]
Nima Mahanfar
Nima Mahanfar le 17 Juin 2015
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]

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 11 Fév 2011
0 + (rand(7,3) > 0.4)
  1 commentaire
Bruno Luong
Bruno Luong le 11 Fév 2011
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

Connectez-vous pour commenter.


Nurul
Nurul le 11 Fév 2011
Thanks for your help. Its helped me a lot.
  1 commentaire
Ned Gulley
Ned Gulley le 11 Fév 2011
Nurul, the best thanks is to accept one of the answers.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by