how to velocize it (avoid loop is possible)
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Luca Re
el 3 de Feb. de 2024
Comentada: Matt J
el 4 de Feb. de 2024
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 comentarios
Respuesta aceptada
Más respuestas (1)
Catalytic
el 4 de Feb. de 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 comentario
Matt J
el 4 de Feb. de 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
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!