# Replace zero in a matrix with value in previous row

23 views (last 30 days)

Show older comments

Hi,

Can you please help me on how can I replace all zeroes in a matrix with the value in previous row?

e.g. if value in row 3 column 4 is 0, it should pick value in row 2 column 4.

I can do it using a for loop but I dont want to use that.

Thanks.

##### 0 Comments

### Accepted Answer

Azzi Abdelmalek
on 1 Feb 2014

Edited: Azzi Abdelmalek
on 1 Feb 2014

A=[1 2 3 4;4 5 0 0;1 0 0 1 ;0 1 1 1]

while any(A(:)==0)

ii1=A==0;

ii2=circshift(ii1,[-1 0]);

A(ii1)=A(ii2);

end

##### 4 Comments

Jan
on 4 Nov 2016

@Mido: Please open a new thread for a new question.

match = (A(:, 3)==0);

A(match, 3) = A(match, 2);

### More Answers (5)

Shivaputra Narke
on 1 Feb 2014

Now answer to your comment...

while(all(a(:))) a(find(a==0))=a(find(a==0)-1) end

##### 3 Comments

Captain Karnage
on 2 Dec 2022

DGM
on 3 Dec 2022

Edited: DGM
on 3 Dec 2022

The loop is never entered at all. You could make some modifications.

a = [0 5 9 13; 2 6 0 0; 3 0 0 15; 0 8 12 16]

na = numel(a);

while ~all(a(:)) % loop runs until there are no zeros

idx = find(a==0);

a(idx) = a(mod(idx-2,na)+1);

end

a

The redundant find() can be removed. Since this is based on decrementing the linear indices, this will fill zeros at the top of a column with content from the bottom of the prior column. Using mod() allows the wrapping behavior to extend across the ends of the array. Note that a(1,1) is filled from a(16,16).

Whether this wrapping behavior is intended or acceptable is a matter for the reader to decide.

Andrei Bobrov
on 1 Feb 2014

l = A == 0;

ii = bsxfun(@plus,size(A,1)*(0:size(A,2)-1),cumsum(~l));

out = A;

out(l) = A(ii(l));

##### 0 Comments

Shivaputra Narke
on 1 Feb 2014

May be this code can help...

% where a is your matrix a(find(a==0))=a(find(a==0)-1)

##### 2 Comments

Amit
on 1 Feb 2014

Lets say your matrix is A

[m,n] = size(A);

An = A';

valx = find(~An); % This will give you zeros elements linear index

valx = valx(valx-n > 0);

An(valx) = An(valx-n);

A = An';

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!