# Interpolating missing values according to time vector

조회 수: 3(최근 30일)
David E.S. 2021년 2월 22일
댓글: David E.S. 2021년 2월 22일
Hi!
I want to interpolate the missing values of this vector:
x=[2 6 8 10 NaN NaN NaN NaN 21 59 NaN 12 80];
but, instead of using the intermediate values in each case, I want to interpolate according another vector of "serial times", for example:
time=[738097.24, 738097.253, 738097.261, 738097.4, 738097.53, 738097.69, 738097.81, 738097.8129, 738097.91, 738098.0, 738098.3, 738098.49, 738098.79];
That means, the values between x(4) and x(9) must respect the sequence given in the time vector.
Is there any form to do that automatically?
Thanks!
##### 댓글 수: 1표시숨기기 없음
dpb 2021년 2월 22일
I have no idea what you mean or expect the result to be???

댓글을 달려면 로그인하십시오.

### 채택된 답변

Cris LaPierre 2021년 2월 22일
Sure. You just have to separate your knowns and unknowns.
x=[2 6 8 10 NaN NaN NaN NaN 21 59 NaN 12 80]';
time=[738097.24, 738097.253, 738097.261, 738097.4, 738097.53, 738097.69, 738097.81, 738097.8129, 738097.91, 738098.0, 738098.3, 738098.49, 738098.79];
% Create index of known values
indKnown = ~isnan(x);
% interpolate to obtain values of unknown values
x(~indKnown) = interp1(time(indKnown),x(indKnown),time(~indKnown))
x = 13×1
2.0000 6.0000 8.0000 10.0000 12.8039 16.2549 18.8431 18.9057 21.0000 59.0000
##### 댓글 수: 1표시숨기기 없음
David E.S. 2021년 2월 22일
That's exactly what I want! Thanks!!

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

Bob Thompson 2021년 2월 22일
I don't know if there is a single command that would do what you're asking, though others might know of one.
A fairly concise way of finishing the array though is the following:
x(isnan(x)) = interp1(time(~isnan(x)),x(~isnan(x)),time(isnan(x)));
##### 댓글 수: 1표시숨기기 없음
David E.S. 2021년 2월 22일
Thanks!! I can't accept more than one anwser, but the code is just perfect and fulfills its function!!

댓글을 달려면 로그인하십시오.

R2019b

### Community Treasure Hunt

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

Start Hunting!

Translated by