MATLAB Answers

How to speed up my code?

2 ビュー (過去 30 日間)
Benson Gou
Benson Gou 2021 年 6 月 18 日
コメント済み: Benson Gou 2021 年 6 月 21 日
Dear All,
I found my code spent a lot of cpu time on the following functions:
  1. 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 件のコメント
Benson Gou
Benson Gou 2021 年 6 月 18 日
Hi, dpb,
Thanks a lot for your reply. I will do as you suggested. You have a good weekend!
Benson

サインインしてコメントする。

採用された回答

Jan
Jan 2021 年 6 月 19 日
if ismember(selectedBus, InjBus_moreZeroLines)
ismember replies a vector, if the inputs are vectors. The if command requires a scalar condition. So I guess, this can be abbreviated. Maybe this is faster:
if any(selectedBus == InjBus_moreZeroLines)
In the line:
red = setdiff([1:length(A)],B)
the square brackets are a waste of time. [ ] is the concatenation operator, but here you concatenate the vector 1:length(A) with nothing.
Maybe this is more efficient:
red = true(size(A));
red(B) = false;
Then use red for logical indexing, instead of numerical indices.
I assume there are faster repalcements for the called functions, but without knowing what the inputs are and the context, it is not possible to suggest modifications.
  1 件のコメント
Benson Gou
Benson Gou 2021 年 6 月 21 日
Hi, Jan,
Thanks a lot for your great help. I will test your suggestions. Once they work, I will accept your answers.
Best regards,
Benson

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by