how to velocize it (avoid loop is possible)
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
E=[0 5 6 9 2;0 0 1 3 1;0 5 4 2 4]'
filtro=ones(size(E));
for i=1:width(E)
bu=find(E(:,i),1,'first');
filtro(1:bu,i)=0;
end
filtro
0 Commenti
Risposta accettata
Più risposte (1)
Catalytic
il 4 Feb 2024
I don't know if "velocize" (not a word) is supposed to mean "accelerate" or "vectorize". The two are not the same.
If you're looking for the fastest possible code, there's no way to know in advance because it depends on the sparsity of E. For very dense E, your loop will probably be faster than @Matt J's answer.
E=rand(5000,3000)>0.1;
tic
filtro=true(size(E));
for i=1:width(E)
bu=find(E(:,i),1,'first');
filtro(1:bu,i)=0;
end
toc
tic
[~,I]=max(logical(E),[],1);
filtro=(1:height(E))'>I;
toc
1 Commento
Matt J
il 4 Feb 2024
True, but be mindful of the flipside:
E=rand(5000,3000)>0.7;
tic
filtro=true(size(E));
for i=1:width(E)
bu=find(E(:,i),1,'first');
filtro(1:bu,i)=0;
end
toc
tic
[~,I]=max(logical(E),[],1);
filtro=(1:height(E))'>I;
toc
Vedere anche
Categorie
Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!