# How to do element by element comparison?

4 views (last 30 days)
Rob on 17 Oct 2012
Given a 2d matrix, say 10x4 with many numbers, lots of which are zeros, I need a matrix that replaces every zero entry with the value of the last non-zero entry in the same column that is before it. for example for the given input:
[0 0 4 0;
0 3 1 0;
0 0 0 2;
0 0 6 2;
3 4 5 6;
8 0 0 9;
0 0 0 0;
0 0 0 0;
0 0 0 0]
output:
[0 0 4 0;
0 3 1 0;
0 3 1 2;
0 3 6 2;
3 4 5 6;
8 4 5 9;
8 4 5 9;
8 4 5 9;
8 4 5 9]
I've experimented with circshift, if statements and for loops but haven't been able to make much headway. Does anyone have suggestions?
Rob on 17 Oct 2012
Brilliant!! Thank you!!

venkat vasu on 17 Oct 2012
Edited: Matt Fig on 17 Oct 2012
Hi.. This code surely will help you and you can check n matrix also.
a=[0 0 4 0; 0 3 1 0; 0 0 0 2; 0 0 6 2; 3 4 5 6; 8 0 0 9; 0 0 0 0; 0 0 0 0; 0 0 0 0];
[r c d]=size(a);
for i=1:r
j=a(i,:);
if i==1
prev=j;
else
b=find(j==0);
for k=1:length(b);
a(i,b(k))=prev(b(k));
end
prev=a(i,:);
end
end
a
Azzi Abdelmalek on 17 Oct 2012

### Categories

Find more on Matrix Indexing in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!