how to velocize it (avoid loop is possible)
Mostrar comentarios más antiguos
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
Respuesta aceptada
Más respuestas (1)
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 comentario
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
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!