Inefficient code - simple counter
1 回表示 (過去 30 日間)
古いコメントを表示
I have the following inefficient bit of code.
for i = 1:n %arb n
if something
A(i,1) = A(i,1) + 1;
elseif somethingelse
A(i,2) = A(i,2) + 1;
end
end
There are actually 5 if/else clauses inside a function which is called inside the loop, but I've reduced it to the above for simplicity. For large n, this is very slow. Is there a faster way to do this? It's supposed to be a simple counter that retains information about the counts.
Thanks
edit: I have filled A with zeros before the loop also.
2 件のコメント
採用された回答
KL
2017 年 12 月 15 日
I suppose your condition is something like checking the range of the specific element. Depending on what range they are in you want to perform something on that specific element.
A = rand(50,1);
ind1 = A<0.25; %first if
ind2 = A>=0.25&A<0.5; %elseif
ind3 = A>=0.5&A<0.75;
ind4 = ~ind1&~ind2&~ind3; %else
B = (A+1).*ind1+(A+2).*ind2+(A+3).*ind3+(A+4).*ind4;
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!