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?

 Akzeptierte Antwort

Geoff Hayes
Geoff Hayes am 1 Mär. 2019

1 Stimme

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by