# Replacing row in matrix with previous row depending on condition

2 visualizzazioni (ultimi 30 giorni)
Oliver Zacho il 19 Giu 2020
Commentato: the cyclist il 19 Giu 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 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

the cyclist il 19 Giu 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 CommentiMostra NessunoNascondi Nessuno
Oliver Zacho il 19 Giu 2020
Thanks alot, this one does that job in a decent amount of time. Lovely. Have a splendid weekend.
the cyclist il 19 Giu 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.

Accedi per commentare.

### Più risposte (1)

David Hill il 19 Giu 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,:);
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Oliver Zacho il 19 Giu 2020
Thanks alot! Have a nice weekend. :)

Accedi per commentare.

### Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

R2019b

### Community Treasure Hunt

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

Start Hunting!

Translated by