Interpolating missing values according to time vector
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
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))
추가 답변 (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)));
참고 항목
카테고리
Help Center 및 File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!