Randomly generate a matrix of zeros and ones with a non-uniform bias
26 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Nurul
am 11 Feb. 2011
Kommentiert: Jack Nelson
am 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]
0 Kommentare
Akzeptierte Antwort
Matt Fig
am 11 Feb. 2011
Like this?
A = rand(1,21)>.3 % Increase number for less ones, decrease for more.
2 Kommentare
Weitere Antworten (3)
Jos (10584)
am 11 Feb. 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 Kommentare
Nima Mahanfar
am 17 Jun. 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
am 17 Jun. 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]
Walter Roberson
am 11 Feb. 2011
0 + (rand(7,3) > 0.4)
1 Kommentar
Bruno Luong
am 11 Feb. 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
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!