Generate random integers with a condition
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Hi all,
I have a matrix A 84x1 (attached). I need to replace ZEROS by randi(3). However, I need to ensure that the number of 1s, 2s or 3s does not exceed 33.
Hope the problem is clear.
Thank you
3 Commenti
Risposta accettata
Jan
il 7 Mar 2018
Modificato: Jan
il 7 Mar 2018
% [EDITED] after the comment:
A = randi([0,5], 84, 1);
z = (A == 0);
nz = sum(z);
ready = false;
while ~ready
A(z) = randi(3, nz, 1);
ready = sum(A==1) < 33 && sum(A==2) < 33 && sum(A==3) < 33;
end
To be sure, add a maximum number of loops. Better stop with an error than run an infinite loop:
count = 0;
while ~ready && count < 1e6
...
count = count + 1;
end
if count == 1e6
error('Cannot find matching values.')
end
A constructive method might be better also: Create a pool with 32 1s, 2s and 3s, and select the elements randomly out of this pool:
pool = repelem(1:3, 32);
index = randperm(numel(pool), nz);
value = pool(index);
Now the vector value must contain less than 33 ones, twos or threes.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Sparse Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!