# How to speed up my code?

2 ビュー (過去 30 日間)
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 件のコメント表示非表示 4 件の古いコメント
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 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 2021 年 6 月 21 日
Hi, Jan,
Best regards,
Benson

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

### Community Treasure Hunt

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

Start Hunting!

Translated by