How to speed up my code?
Mostrar comentarios más antiguos
Dear All,
I found my code spent a lot of cpu time on the following functions:
- intersect, took 20.11 seconds, called 232074 times in my code.
My code:
C = intersect(A,B); where A and B are two column arrays.
2. unique, took 8.845 seconds, called 251736 times in my code.
My code:
BadMeas = unique([A; red2(B)']); where A and B are two column arrays, red2 is another row array.
3. ismember, took 7.117 seconds, called 269278 times in my code.
My code:
if ismember(selectedBus, InjBus_moreZeroLines)
for i = 1 : m
do the calculation
end
end
4. setdiff, called 13103 times in my code.
My code:
red = setdiff([1:length(A)],B);
A is an array and B is an array formed by integers.
I am wondering if there are faster functions to replace the above ones. Thanks.
Benson
5 comentarios
James Tursa
el 18 de Jun. de 2021
To get a meaningful answer, it would be better to post details about the overall problem you are solving and then also post the code you have written. Maybe there is a better way to solve the problem that doesn't call all of the functions you are currently calling.
"I am wondering if there are faster functions to replace the above ones."
If there were otherwise identical faster functions that were drop-in replacements some slower functions... then why would anyone use the slower functions?
We need to consider the entire algorithm, not just some specific function calls. Upload your code by clicking the paperclip button.
Benson Gou
el 18 de Jun. de 2021
Cant' disagree w/ Stephen -- you would need, I think, to build a test case that has just the guts of the algorithm for anybody to be able to tell much...or describe the problem to be solved and perhaps somebody will have an alternate algorithm. Generally, real gains in speed are obtained by better/smarter algorithms than just trying to optimize existing code.
One thing I do note, however is
BadMeas = unique([A; red2(B)']);
has a set of square brackets and catenation inside what is described as a tight loop -- that may be a major part of the time there rather than unique() itself. Move that out if at all possible or do a direct assignment to a preallocated array instead of catenation.
Benson Gou
el 18 de Jun. de 2021
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre Discrete Fourier and Cosine Transforms en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!