Speeding Up Logical Operations
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Amit
le 9 Déc 2014
Commenté : Carlos Adrian Vargas Aguilera
le 11 Avr 2020
Hi Guys,
I am trying to uses the function below
function coords = distancePerBound(coords,L)
hL = L/2;
coords(coords > hL) = coords(coords > hL) - L;
coords(coords < -hL) = coords(coords < -hL) + L;
end
where coords is a 3xn (where n is ~100,000). In the function that uses it, this function gets called many times and is a bottle neck in speed. Is there any thing I can do to improve this?
On a side note, I know that for a vector 'x', x.*x is faster than x.^2. Is there any speeding possibility for 1./x as well? Thank you.
0 commentaires
Réponse acceptée
Matt J
le 9 Déc 2014
function coords = distancePerBound(coords,L)
hL = L/2;
idx=coords > hL;
coords(idx) = coords(idx) - L;
idx=coords < -hL;
coords(idx) = coords(idx) + L;
end
7 commentaires
Carlos Adrian Vargas Aguilera
le 11 Avr 2020
Well, after all you already get important info with >hL. Maybe
function coords = distancePerBound(coords,L)
hL = L/2;
idx = coords > hL;
coords(idx) = coords(idx) - L;
idx(~idx) = coords(~idx) >= -hL;
coords(~idx) = coords(~idx) + L;
end
Plus de réponses (1)
Adam
le 9 Déc 2014
Modifié(e) : Adam
le 9 Déc 2014
What does the profiler say about the speed of this?
Is it the function that is slow or the number of times you call it?
Within the function it is vectorised, but calling it many times lessens that effect because the many calls are not vectorised together.
Can you not concatenate the data input to the many calls to make just a single call?
Again though this comes down to where exactly the profiler is pointing to as being slow.
As an aside there are various alternatives that can be tried. If it were me and this function were found to be slow I would create a quick test script containing as many of those options as I can think of and see which is fastest because it is often hard to tell without simply trying and timing the different implementations.
8 commentaires
Adam
le 9 Déc 2014
In that case it would come down to what i said earlier I guess. Create a simple test program with different implementations of that one function, make sure they all give the same answer, time them all and see if any is faster than the current.
I don't personally see much that I would be able to say would be a lot faster than you have, but optimised functions in Matlab can be strange sometimes so only the implementation and timing of the alternatives will tell for sure.
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!