Replacing row in matrix with previous row depending on condition

1 Ansicht (letzte 30 Tage)
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.

Akzeptierte Antwort

the cyclist
the cyclist am 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 Kommentare
Oliver Zacho
Oliver Zacho am 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 am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

David Hill
David Hill am 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,:);

Kategorien

Mehr zu Structures finden Sie in Help Center und File Exchange

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by