Interpolating missing values
11 次查看(过去 30 天)
显示 更早的评论
I have a matrix with NaNs in some of the cells. I need to find all cells of the matrix with NaN values, then interpolate the missing values using the first value before and after the NaNs, and put the interpolated values in the place of the NaN values within the matrix. NaNs may be only one at a time or several in a row, the first and last value around NaN sections may span more than one row.
I have looked at find and interp1 in Matlab help, but can't make it work for my situation. For example: how do you make find locate NaN values? And with interp1, I am not sure what all the variables should be in this case. Any tips?
采纳的回答
更多回答(2 个)
Fangjun Jiang
2011-11-3
Interpolation on a 1-D vector is not that hard. Maybe it could be expanded to 2-D matrix too. See if interp1() is all you need.
%%original data
x=1:0.1:10;
y=sin(x);
ind=round(ceil(90*rand(10,1)));
y(ind)=nan;
figure(1);plot(x,y);
%processing
ind=~isnan(y);
NewY=interp1(x(ind),y(ind),x);
figure(2);plot(x,NewY);
For 2-D
%%original good data
[x,y,z]=peaks;
figure(1); surf(x,y,z);
%missing some z values
[m,n]=size(z);
ind_m=ceil((m-1)*rand(10,1));
ind_n=ceil((n-1)*rand(10,1));
Incomplete_z=z;
Incomplete_z(ind_m,ind_n)=nan;
figure(2);surf(x,y,Incomplete_z);
%interpolate to recover z
index=isnan(Incomplete_z);
row_index=any(index,2);
col_index=any(index,1);
NewX=x(~row_index,~col_index);
NewY=y(~row_index,~col_index);
NewZ=Incomplete_z(~row_index,~col_index);
Interpolate_z=interp2(NewX,NewY,NewZ,x,y);
figure(3);surf(x,y,Interpolate_z)
2 个评论
Fangjun Jiang
2011-11-6
2-D is similar. You need to get rid of the rows and columns where any element in the row or column is nan. See update.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 NaNs 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!