Trying to reduce computation time
5 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Jan
2017-1-25
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 个评论
Jan
2017-1-25
编辑:Jan
2017-1-25
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Performance and Memory 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!