How to vectorize this code to eliminate nested For loops
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Jae Min Lee
le 4 Sep 2018
Commenté : Jae Min Lee
le 4 Sep 2018
Would like to know how this code be vectorized:
for y=1:rows
for x=1:cols
if (segMat(y,x) == 255)
Energy(y,x) = Energy(y,x) + motionMap(y,x);
end
end
for y=1:rows
for x=1:cols
delta(y,x) = kronDel(255, segMat(y,x));
end
end
The kronDel function acts like the Kronecker delta.
2 commentaires
Rik
le 4 Sep 2018
Is segMat a function or an array? The second set of loops could be replaced with a call to arrayfun, but this is not always a speed improvement.
Réponse acceptée
Walter Roberson
le 4 Sep 2018
Modifié(e) : Walter Roberson
le 4 Sep 2018
Assuming that motionMap is an array and not a function,
%no loop needed
mask = segMat == 255;
Energy(mask) = Energy(mask) + motionMap(mask);
After which you can have the second nested loop calling kronDel
kronDel looks more likely to be a function than an array, so it is difficult to know if we could vectorize that section.
I speculate that your kronDel function returns the first parameter if the second parameter is 0, and otherwise returns 0. If my speculation is correct, then the loops and call could be replaced by
delta = 255 .* (segMat == 0);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements 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!