Asked by Bob Choy
on 17 Nov 2012

I have a matrix, on which the values become larger as columns go, but some values in that matrix are zero.

E.g. [1,1,1;2,0,2;3,3,3]

I want to replace the values that are zero with an interpolation. In this example theres an increment of 1 per line, so the value zero should become the previous value in that column (1) plus the average increment value (1). Therefore becoming the value 2.

Returning the matrix [1,1,1;2,2,2;3,3,3]

So how can I do this given any matrix, with whatever values.

EDIT: Okay I probably got myself misunderstood, I dont want the zero values to be always the previous value + 1. Let me illustrate further:

M = [1,10;1,0;1,0;1,22]

-Values m(2,2) and m(3,2) are both zero.

-Values m(1,2) and m(4,2) are 10 and 22 which means in 3 rows there was an increment of 12 values, averaging and increment of 4 values per row.

-Interpolating, the values for m(2,2) and m(3,2) should be 14 and 18 respectively.

Thanks alot for you help, appreciated.

*No products are associated with this question.*

Answer by Azzi Abdelmalek
on 17 Nov 2012

Edited by Azzi Abdelmalek
on 17 Nov 2012

Accepted answer

Ok, if the first line is different from zero

a= [1,1,1;2,0,2;0,3,3] inc=1; idx=find(~a) a(idx)=a(idx-1)+inc

Show 2 older comments

Azzi Abdelmalek
on 18 Nov 2012

You said the average increment is, for example for the first column:

(30-1)/4= 7.25,

why are you expecting inc to be 4?

Bob Choy
on 18 Nov 2012

Azzi Abdelmalek
on 18 Nov 2012

Bob, If you have a new problem, post a new question, and make it as clear as possible

Opportunities for recent engineering grads.

## 2 Comments

## Azzi Abdelmalek (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/54000#comment_111695

What if 0 is in the first line

## Bob Choy (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/54000#comment_111697

This shouldnt be a problem, there are never zeros in the first line, meaning I only want to do this for the second line and forth.

Thank you.