Create vector with unique values
10 ビュー (過去 30 日間)
古いコメントを表示
I need to create a vector of length 5000 in the interval from 1 to 2 with unique values (so that there are no repetitions), is it possible to do this? (the randi command gives me the values, but there appear repetitions)
0 件のコメント
採用された回答
David Hill
2022 年 3 月 31 日
編集済み: David Hill
2022 年 3 月 31 日
v=1+rand(1,5000);
1 件のコメント
Bruno Luong
2022 年 3 月 31 日
編集済み: Bruno Luong
2022 年 3 月 31 日
You can't be sure there is no repetition, especially consider the number of floating point numbers in (0,1) and generate by rand() on a computer are finite (but large), but I admit the chance is tiny.
その他の回答 (2 件)
Bruno Luong
2022 年 3 月 31 日
編集済み: Bruno Luong
2022 年 3 月 31 日
Rejection method, it likely needs a single iteration
n = 5000;
while true
r = unique(1+rand(1,round(n*1.1)));
p = length(r);
if p >= n
r = r(randperm(p,n));
break
end
end
r
% check
all(r>=1 & r<=2)
length(unique(r))==length(r)
4 件のコメント
Bruno Luong
2022 年 3 月 31 日
編集済み: Bruno Luong
2022 年 3 月 31 日
Yes, you point correctly unique sort the random stream.
+1 Good point alsoo using 'stable' option and avoid randperm.
Bruno Luong
2022 年 3 月 31 日
Here is complete code with modification suggested by @Les Beckham
n = 5000;
while true
r = unique(1+rand(1,round(n*1.1)),'stable');
p = length(r);
if p >= n
r = r(1:n);
break
end
end
Bruno Luong
2022 年 3 月 31 日
編集済み: Bruno Luong
2022 年 3 月 31 日
% I'm sure there is no repetition but the set of values is not random
r = 1+randperm(5000)/5000;
% check
all(r>=1 & r<=2)
length(unique(r))==length(r)
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!