Trying to reduce computation time
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hey, I am trying to implement a code to compute the values of two functions using a large array of input.
visitst = symfun(exp(T/4)+1000,T);
visitsp = symfun(-10*(P-10)^2+5000,P);
for i=1:n
Values1(i) = visitst(Input1(i));
Values2(i) = visitsp(Input2(i));
end
I am looking to go through an "Input1" and "Input2" array of 100k+ different inputs, but even 1000 are taking extremely long computing times. Can someone suggest a method of improving this?
0 commentaires
Réponse acceptée
Jan
le 25 Jan 2017
Pre-allocation the output before the loop:
Value1 = zeros(1, n);
Value2 = zeros(1, n);
I do not expect, that this is the bottleneck. But the costs of a forgotton pre-allocation grow exponentially, such that there is a limit in the input size, where this becomes the bottleneck.
2 commentaires
Jan
le 25 Jan 2017
Modifié(e) : Jan
le 25 Jan 2017
Wow, I'm surprised. Note that zeros(n) allocates a n*n matrix, but I'm not sure if the double class is sufficient for your case. Another method for an implicit pre-allocation is to run the loop backwards:
for i = n:-1:1 % Backwards for implicit pre-allocation
Then the last element is created at first, which reserves the complete vector at once - and in the matching class. Just be sure to add the comment, otherwise the readers (like you in 3 months) might wonder, what the purpose of this direction might be useful for.
For further speedups, use the profiler at first: Find the line, which uses the most processing time. Optimizing other parts is hardly useful.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Historical Contests 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!