Effacer les filtres
Effacer les filtres

Help with vectorizing find command

1 vue (au cours des 30 derniers jours)
dave
dave le 29 Juil 2013
Hi,
I'm working on some code for roulette wheel selection and have some problems vectorizing the last two lines of this section.
parents = zeros(1, 2);
indexes = [12; 32; 35; 36; 47];
cs = [0.21; 0.41; 0.58; 0.79; 1.00];
r = rand(1, 2);
parents(1) = indexes(find(r(1) < cs, 1));
parents(2) = indexes(find(r(2) < cs, 1));
I already tried the following, but it resulted in an error because the dimensions of r and cs don't match:
parents = indexes(find(r < cs, 1));
I know that vectorizing this particular example won't make much of a difference in terms of speed, but it will help me get better in terms of programming with Matlab. So any help would be appreciated..

Réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 29 Juil 2013
Modifié(e) : Azzi Abdelmalek le 29 Juil 2013
parents =arrayfun(@(x) indexes(find(x < cs,1)),r);
But the for loop is 15 faster
Edit
parents=zeros(1,numel(r)); % Pre-allocate
for k=1:numel(r)
parents(k)=indexes(find(r(k)< cs,1));
end
  3 commentaires
Azzi Abdelmalek
Azzi Abdelmalek le 29 Juil 2013
Modifié(e) : Azzi Abdelmalek le 29 Juil 2013
This does not mean there is no better way. In the above code I forget to Pre-allocate. Look at Edit
Azzi Abdelmalek
Azzi Abdelmalek le 29 Juil 2013
Speed test for a code in the loop (1000 times)
Elapsed time is 0.312394 seconds. Dpb's answer
Elapsed time is 0.009241 seconds. Azzi for loop answer
Elapsed time is 0.181920 seconds. Azzi's arrayfun answer

Connectez-vous pour commenter.


dpb
dpb le 29 Juil 2013
parents=accumarray([1:2]',r,[],@(x) indexes(find(x<cs,1)));
  2 commentaires
dave
dave le 29 Juil 2013
Thanks dpb...nice one!
dpb
dpb le 29 Juil 2013
Didn't time it...that wasn't part of the request... :)

Connectez-vous pour commenter.

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!

Translated by