Create vector with unique values
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Lev Mihailov
il 31 Mar 2022
Commentato: Bruno Luong
il 31 Mar 2022
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 Commenti
Risposta accettata
David Hill
il 31 Mar 2022
Modificato: David Hill
il 31 Mar 2022
v=1+rand(1,5000);
1 Commento
Bruno Luong
il 31 Mar 2022
Modificato: Bruno Luong
il 31 Mar 2022
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.
Più risposte (2)
Bruno Luong
il 31 Mar 2022
Modificato: Bruno Luong
il 31 Mar 2022
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 Commenti
Bruno Luong
il 31 Mar 2022
Modificato: Bruno Luong
il 31 Mar 2022
Yes, you point correctly unique sort the random stream.
+1 Good point alsoo using 'stable' option and avoid randperm.
Bruno Luong
il 31 Mar 2022
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
il 31 Mar 2022
Modificato: Bruno Luong
il 31 Mar 2022
% 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 Commenti
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!