Speeding up for loop with if statement
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi all,
Got what I believe is a noob question here: I have a function and it seems that 90% of my runtime is taken up by one loop. I'm wonderin if you guys can help me bring that down/out
The code is as follows (I've replaced the actually O and gamma variables with rands)
Note I originally wrote this with a lot of for loops as I was going to translate it to C and wanted the proting to be straight forward, but now I have this huge bottlneck (I would still prefer to solve it in a way that translates easily to C --- when I get time to port the project :P).
N = 4;
T = 3000000;
M = 170;
O = randi(M,1,T);
gamma = rand(N,T);
B = zeros(N,M);
for j = 1:N
denom = 0;
for t = 1:T
denom = denom + gamma(j,t);
end %t
for k = 1:M
numer = 0;
for t = 1:T
if(O(t) == k)
numer = numer + gamma(j,t);
end
end %t
B(j,k) = numer/denom;
end %k
end %i
2 Kommentare
Walter Roberson
am 23 Mär. 2020
accumarray(). You could probably do all of numer calculations at the same time. denom = sum(gamma, 2) in vectorized form
Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!