Slow-running code for removing rows

I have a set of code that works, but a part of it runs very slowly. Basically I'm trying to remove zero-only rows from two matrixes, and I'm able to tell that both have an empty row if the first element in one matrix is zero. Here's the actual code:
for a=1:numberofrows
if slopes(a,1)==0
slopes(a,:)=[];
switchingtimes(a,:)=[];
end
end
I'd try to do a nonzeros function and then a reshape function, but sometimes slopes have a zero or two at the end of a column.
Is there any way to speed up this code?

 Respuesta aceptada

Geoff Hayes
Geoff Hayes el 1 de Mzo. de 2019
Christian - what about using find as
slopes(find(slopes(:,1)==0), :) = []
We use find to return all indices of the first column of slopes whose element is a zero. We then remove all of these rows with the assignment to [] (like you have done already).

2 comentarios

Christian F
Christian F el 4 de Mzo. de 2019
Thanks! It worked way faster than the old code!
Stephen23
Stephen23 el 4 de Mzo. de 2019
Editada: Stephen23 el 4 de Mzo. de 2019
find is not required. Logical indexing is simpler and faster:
idx = slopes(:,1)==0;
slopes(idx,:) = []
switchingtimes(idx,:) = [];

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2018b

Preguntada:

el 1 de Mzo. de 2019

Editada:

el 4 de Mzo. de 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by