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?

 采纳的回答

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 个评论

Thanks! It worked way faster than the old code!
find is not required. Logical indexing is simpler and faster:
idx = slopes(:,1)==0;
slopes(idx,:) = []
switchingtimes(idx,:) = [];

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

产品

版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by