Sampling with periodic replacement
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Matt J
le 31 Déc 2018
Modifié(e) : Walter Roberson
le 1 Jan 2019
I am looking for an efficient way of doing randperm(n,k) many successive times with the same n and k. Can anyone propose something more efficient than the obvious for-loop approach below?
M=1e5;
n=100;
k=10;
A=nan(k,M);
for i=1:M
A(:,i) = randperm(n,k).';
end
0 commentaires
Réponse acceptée
Walter Roberson
le 31 Déc 2018
In current versions of MATLAB, randperm with small k relative to n (and perhaps other cases) uses a Fisher-Yates shuffle for efficiency.
Older versions of MATLAB use sort(rand) to extract orderings. That can be extended easily:
[~, A] = sort( rand(n, M) );
2 commentaires
Walter Roberson
le 1 Jan 2019
Modifié(e) : Walter Roberson
le 1 Jan 2019
Good idea. On older systems, you would use A(1:k,:)
... Though I just did some timing tests, and using sort and indexing turns out to be measurably faster. Using sort and indexing is bout 0.125 for the parameters you indicate, vs about 0.156 for using mink.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!