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?

 採用された回答

Geoff Hayes
Geoff Hayes 2019 年 3 月 1 日

1 投票

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 件のコメント

Christian F
Christian F 2019 年 3 月 4 日
Thanks! It worked way faster than the old code!
Stephen23
Stephen23 2019 年 3 月 4 日
編集済み: Stephen23 2019 年 3 月 4 日
find is not required. Logical indexing is simpler and faster:
idx = slopes(:,1)==0;
slopes(idx,:) = []
switchingtimes(idx,:) = [];

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

製品

リリース

R2018b

質問済み:

2019 年 3 月 1 日

編集済み:

2019 年 3 月 4 日

Community Treasure Hunt

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

Start Hunting!

Translated by