fillmissing
填充缺失值
F = fillmissing(A,method) % 插值填充
案例如下:
x = [-4*pi:0.1:0, 0.1:0.2:4*pi]; % 定義非均勻采樣點向量,並計算這些點上的正弦函數。 A = sin(x); A(A < 0.75 & A > 0.5) = NaN; % 將 NaN 值插入 A 中。 % 使用線性插值填充缺失數據,並返回填充的向量 F 和邏輯向量 TF。TF 項中的值 1 (true) 對應於 F 中的填充值。 [F,TF] = fillmissing(A,'linear','SamplePoints',x); plot(x,A,'.', x(TF),F(TF),'o') % 繪制原始數據和填充的數據。 xlabel('x'); ylabel('sin(x)') legend('Original Data','Filled Missing Data')
填充方法還包括:
方法 | 說明 |
---|---|
'previous' |
上一個非缺失值 |
'next' |
下一個非缺失值 |
'nearest' |
距離最近的非缺失值 |
'linear' |
相鄰非缺失值的線性插值(僅限數值、duration 和 datetime 數據類型) |
'spline' |
分段三次樣條插值(僅限數值、duration 和 datetime 數據類型) |
'pchip' |
保形分段三次樣條插值(僅限數值、duration 和 datetime 數據類型) |
'makima' |
修正 Akima 三次 Hermite 插值(僅限數值、duration 和 datetime 數據類型) |
F = fillmissing(A,movmethod,window) % 滑動填充
案例如下:
% 創建樣本點向量 x 和包含缺失值的數據向量 A。 x = linspace(0,10,200); A = sin(x) + 0.5*(rand(size(x))-0.5); A([1:10 randi([1 length(x)],1,50)]) = NaN; % 使用窗口長度為 10 的移動中位數替換 A 中的 NaN 值,並繪制原始數據和填充的數據。 F = fillmissing(A,'movmedian',10); plot(x,F,'r.-',x,A,'b.-') legend('Filled Missing Data','Original Data')
注意:當使用'movmedian'方法填充數據時,窗口長度為2並不能有效填充數據,原始數據中的NaN將被保留
填充方法還包括:
方法 | 說明 |
---|---|
'movmean' |
窗口長度為 window 的移動均值(僅限數值數據類型) |
'movmedian' |
窗口長度為 window 的移動中位數(僅限數值數據類型) |
特別感謝:
李果(大涼茶)
參考文獻: