How to use randperm with minimum spacing between random numbers
Afficher commentaires plus anciens
Hi
I would like to use randperm but be able to specify the minimum separation between the random numbers generated. Please advise.
p = randperm(n,k) returns a row vector containing k unique integers selected randomly from 1 to n inclusive.
I would like to have the k intergers to have atleast a separation of say b when sorted.
Thanks
Gordon
1 commentaire
Guillaume
le 30 Août 2019
What sort of values are n, k and b? If n>>k and n>>b then you could just retry randperm until you've got a set that satisfies your condition.
Réponses (2)
Bruno Luong
le 30 Août 2019
Modifié(e) : Bruno Luong
le 30 Août 2019
n=20;
k=3;
b=7;
[as,is]=sort(randperm(n-(k-1)*(b-1),k)); % if it throws an error then b/k/n are not compatible
a = as + (0:k-1)*(b-1);
a = a(is)
2 commentaires
Mohd Faisal Ansari
le 9 Mai 2020
Modifié(e) : Mohd Faisal Ansari
le 9 Mai 2020
Hello Sir, The above code is for the range from 0 to n
please help me to edit the code so that it works between range a to b
Thank you
Guillaume
le 9 Mai 2020
Use the exact same code to get numbers between 0 and (b-a), then add a to all the numbers, presto, you have numbers between a and b.
James Tursa
le 30 Août 2019
Maybe something like this will suffice for your needs?
p = b * randperm(floor(n/b),k)
If n/b isn't an integer value, then there be some "missing" higher numbers. (Or could adjust this so the "missing" numbers are the lower numbers or are perhaps randomly scattered throughout the range).
1 commentaire
Mohd Faisal Ansari
le 9 Mai 2020
Hello Sir, The above code is for the range from 0 to n
please help me to edit the code so that it works between range a to b
Thank you.
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!