MATLAB Answers


How to use randperm with minimum spacing between random numbers

Asked by Gordon Ariho on 30 Aug 2019
Latest activity Edited by Bruno Luong
on 30 Aug 2019
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.

  1 Comment

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.

Sign in to comment.


2 Answers

Answer by Bruno Luong
on 30 Aug 2019
Edited by Bruno Luong
on 30 Aug 2019

[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)


Sign in to comment.

Answer by James Tursa
on 30 Aug 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).


Sign in to comment.