フィルターのクリア

Question about using randperm in a loop

2 ビュー (過去 30 日間)
Veena Chatti
Veena Chatti 2020 年 3 月 9 日
コメント済み: Veena Chatti 2020 年 3 月 10 日
Hi,
I'm using randperm in a loop that's meant to generate unique random three-digit numbers to fill a 5x5 matrix, r, like this:
for i = 1:length(r)
r(1:5,i) = (randperm(900,5) + 99);
end
My question is:
Is there a possibility of repeating a number given the function is being called 5 times, once for each column? I want each number to be unique.
Thanks,
Veena

採用された回答

John D'Errico
John D'Errico 2020 年 3 月 10 日
編集済み: John D'Errico 2020 年 3 月 10 日
So, you want to sample 5 sets of 5 numbers, all from the same set, but you want them to be unique? (The technical description would be to sample without replacement.)
The point is, you already know how to sample 5 such numbers. So just sample 25 numbers!
r = reshape(randperm(900,25) + 99,[5 5]);
There is no reason to need a loop.
  2 件のコメント
Veena Chatti
Veena Chatti 2020 年 3 月 10 日
Hi John,
Thanks, reshape worked!
Best,
Veena
Veena Chatti
Veena Chatti 2020 年 3 月 10 日
And yes, I got rid of the loop!

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

その他の回答 (1 件)

James Tursa
James Tursa 2020 年 3 月 10 日
編集済み: James Tursa 2020 年 3 月 10 日
If you want each number in the matrix to be unique, then don't call randperm( ) by row because that will not guarantee uniqueness between calls. Call randperm( ) only once for the entire matrix (25 elements) and then reshape to a 5x5. E.g., something like
r = reshape(randperm(900,25) + 99,5,5);
  1 件のコメント
Veena Chatti
Veena Chatti 2020 年 3 月 10 日
Hi James,
Thanks, reshape worked!
Best,
Veena

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by