How to replace the numbers in matrix?
4 views (last 30 days)
Show older comments
Hi,
I'm trying to replace the zeros to the average numbers in between before and after numbers, how to do it?
[1,2,3,0,5,6,0,8,9 ; 1,3,0,0,0,11,13,15,17]
become
[1,2,3,4,5,6,7,8,9 ; 1,3,5,7,9,11,13,15,17]
Thank you
Accepted Answer
_
on 18 Jan 2022
Here is a way to do it using linear interpolation on each row. It will interpolate between the non-zero numbers to fill in the zeros (at least two non-zero numbers are required on a given row in order to interpolate) and leave zeros at the beginning or end of the row unchanged. Demonstrated with a slightly more general case:
A = [1,2,3,0,5,6,0,8,9 ; 1,3,0,0,0,11,13,15,17; 0 0 0 0 0 0 0 0 0; 0 0 3 0 0 7 0 0 0]
c = 1:size(A,2);
for i = 1:size(A,1)
idx = A(i,:) == 0;
if nnz(~idx) < 2
continue
end
A(i,idx) = interp1(c(~idx),A(i,~idx),c(idx),'linear',0);
end
display(A);
4 Comments
_
on 18 Jan 2022
@Han-Yun Chiang Sorry, I never use "Import Data", so I don't know if there's a way to apply this code when importing data from a file. You may have to just import the data and then run this code on it afterwards.
More Answers (1)
Adam Danz
on 17 Jan 2022
>I'm trying to replace the zeros to the intermediate numbers
I assume you mean you want to replace 0s with the value immediatly above or below the 0. If the entire columns contains 0s, nothing will change.
A = [1,2,3,0,5,6,0,8,9 ; 1,3,0,0,0,10,12,14,16]
A(A==0) = A(flipud(A)==0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!