MATLAB Answers

Replacing row in matrix with previous row depending on condition

6 views (last 30 days)
Oliver Zacho
Oliver Zacho on 19 Jun 2020
Commented: the cyclist on 19 Jun 2020
Hi
Say I have a matrix:
A=[2,5,3;5,8,2;1,-2,5]
If a value in any of the rows are -2 the whole row should be replaced by the previous row.
So the result would be:
A=[2,5,3;5,8,2;5,8,1]
The matrix consists of 1 million rows, so I'm looking for the fastest method.

  0 Comments

Sign in to comment.

Accepted Answer

the cyclist
the cyclist on 19 Jun 2020
Here is one way:
while any(A(:)==-2)
rowToReplace = find(any(A==-2,2));
A(rowToReplace,:) = A(rowToReplace-1,:);
end
This solution could probably made faster by using only logical indices, without the find command, but I felt lazy.

  2 Comments

Oliver Zacho
Oliver Zacho on 19 Jun 2020
Thanks alot, this one does that job in a decent amount of time. Lovely. Have a splendid weekend.
the cyclist
the cyclist on 19 Jun 2020
This is a little faster, in limited testing:
while any(A(:)==-2)
rowToReplace = any(A==-2,2);
A(rowToReplace,:) = A([rowToReplace(2:end); false],:);
end
The optimized version might depend on the pattern of -2's in the array.

Sign in to comment.

More Answers (1)

David Hill
David Hill on 19 Jun 2020
If you have consecutive rows containing -2, you will have to repeat until all the -2 rows have been replaced if that is your goal
[a,~]=find(A==-2);
a=unique(a);
A(a,:)=A(a-1,:);

Products


Release

R2019b