Inefficient code - simple counter
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
KL
am 15 Dez. 2017
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;
Siehe auch
Kategorien
Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!