How to use randperm with minimum spacing between random numbers

6 ビュー (過去 30 日間)
Gordon Ariho
Gordon Ariho 2019 年 8 月 30 日
コメント済み: Guillaume 2020 年 5 月 9 日
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 件のコメント
Guillaume
Guillaume 2019 年 8 月 30 日
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.

サインインしてコメントする。

回答 (2 件)

Bruno Luong
Bruno Luong 2019 年 8 月 30 日
編集済み: Bruno Luong 2019 年 8 月 30 日
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 件のコメント
Mohd Faisal Ansari
Mohd Faisal Ansari 2020 年 5 月 9 日
編集済み: Mohd Faisal Ansari 2020 年 5 月 9 日
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
Guillaume 2020 年 5 月 9 日
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
James Tursa 2019 年 8 月 30 日
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 件のコメント
Mohd Faisal Ansari
Mohd Faisal Ansari 2020 年 5 月 9 日
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSparse Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by