MATLAB中fillmissing函數(shù)用法小結(jié)
fillmissing函數(shù)的功能是填充缺失的條目。
語(yǔ)法
F = fillmissing(A,'constant',v) F = fillmissing(A,method) F = fillmissing(A,movmethod,window) F = fillmissing(A,'knn') F = fillmissing(A,'knn',k) F = fillmissing(A,fillfun,gapwindow) F = fillmissing(___,dim) F = fillmissing(___,Name,Value) [F,TF] = fillmissing(___)
說明
?F = fillmissing(A,'constant',v) 使用常量值 v 填充缺失的數(shù)組或表?xiàng)l目。如果 A 是矩陣或多維數(shù)組,則 v 可以是標(biāo)量或向量。如果 v 是向量,則每個(gè)元素指定 A 的對(duì)應(yīng)列中的填充值。如果 A 是表或時(shí)間表,則 v 也可以是元胞數(shù)組,其元素包含每個(gè)表變量的填充值。
缺失值的定義取決于 A
的數(shù)據(jù)類型:
- NaN - double、single、duration 和 calendarDuration
- NaT — datetime
- <missing> — string
- <undefined> — categorical
- {''} - 字符向量的 cell
如果 A
是表,則每個(gè)變量的數(shù)據(jù)類型定義該變量的缺失值。
?F = fillmissing(A,method) 使用 method 指定的方法填充缺失的條目。例如,fillmissing(A,'previous') 對(duì) A 中的缺失條目使用上一個(gè)非缺失條目進(jìn)行填充。
?F = fillmissing(A,movmethod,window) 使用窗長(zhǎng)度為 window 的移動(dòng)窗均值或中位數(shù)填充缺失條目。例如,fillmissing(A,'movmean',5) 使用窗長(zhǎng)度為 5 的移動(dòng)均值填充缺失數(shù)據(jù)。
F = fillmissing(A,'knn') 用最近鄰行中的對(duì)應(yīng)值填充缺失條目,這些值是根據(jù)行之間的成對(duì)歐幾里德距離計(jì)算的。
F = fillmissing(A,'knn',k) 用 k 最近鄰行中對(duì)應(yīng)值的均值填充缺失條目,該均值是根據(jù)行之間的成對(duì)歐幾里德距離計(jì)算的。例如,fillmissing(A,'knn',5) 用五個(gè)最近鄰行中對(duì)應(yīng)值的均值填充 A 中的缺失條目。
F = fillmissing(A,fillfun,gapwindow) 使用由函數(shù)句柄 fillfun 指定的自定義方法填充缺失條目的空缺,并在每個(gè)空缺周圍設(shè)置固定窗,從該窗計(jì)算填充值。fillfun 必須具有輸入?yún)?shù) xs、ts 和 tq,它們是向量,分別包含長(zhǎng)度為 gapwindow 的采樣數(shù)據(jù) xs、長(zhǎng)度為 gapwindow 的采樣數(shù)據(jù)位置 ts 和缺失數(shù)據(jù)位置 tq。ts 和 tq 中的位置是采樣點(diǎn)向量的子集。
F = fillmissing(___,dim) 支持上述語(yǔ)法中的任何輸入?yún)?shù)組合,且可指定 A 中要進(jìn)行運(yùn)算的維度。默認(rèn)情況下,fillmissing 沿其大小不為 1 的第一個(gè)維度進(jìn)行運(yùn)算。例如,如果 A 是矩陣,則 fillmissing(A,2) 跨 A 的各列進(jìn)行運(yùn)算,逐行填充缺失的數(shù)據(jù)。
F = fillmissing(___,Name,Value) 使用一個(gè)或多個(gè)名稱-值參數(shù)指定用于填充缺失值的其他參數(shù)。例如,如果 t 是時(shí)間值向量,則 fillmissing(A,'linear','SamplePoints',t) 會(huì)基于 t 中的時(shí)間值對(duì) A 中的數(shù)據(jù)進(jìn)行插值。
?[F,TF] = fillmissing(___) 還返回邏輯數(shù)組 TF,該數(shù)組指示 F 中先前缺失現(xiàn)已填充的條目的位置。
示例
包含 NaN
值的向量
創(chuàng)建包含 NaN 值的向量,并使用前一個(gè)非缺失值替換每個(gè) NaN。
A = [1 3 NaN 4 NaN NaN 5]; F = fillmissing(A,'previous') F = 1×7 1 3 3 4 4 4 5
由 NaN
值組成的矩陣
創(chuàng)建一個(gè) 2×2 矩陣,每列有一個(gè) NaN 值。在第一列中用 100 填充 NaN,在第二列中用 1000 填充。
A = [1 NaN; NaN 2] A = 2×2 1 NaN NaN 2 F = fillmissing(A,'constant',[100 1000]) F = 2×2 1 1000 100 2
插入缺失數(shù)據(jù)
使用插值來替換非均勻采樣的數(shù)據(jù)中的 NaN 值。定義非均勻采樣點(diǎn)向量,并計(jì)算這些點(diǎn)上的正弦函數(shù)。
x = [-4*pi:0.1:0, 0.1:0.2:4*pi]; A = sin(x);
將 NaN 值插入 A 中。
A(A < 0.75 & A > 0.5) = NaN;
使用線性插值填充缺失數(shù)據(jù),并返回填充的向量 F 和邏輯向量 TF。TF 項(xiàng)中的值 1 (true) 對(duì)應(yīng)于 F 中的填充值。
[F,TF] = fillmissing(A,'linear','SamplePoints',x);
繪制原始數(shù)據(jù)和填充的數(shù)據(jù)。
scatter(x,A) hold on scatter(x(TF),F(TF)) legend('Original Data','Filled Data')
如圖所示:
使用移動(dòng)中位數(shù)方法
使用移動(dòng)中位數(shù)填充缺失的數(shù)值數(shù)據(jù)。創(chuàng)建樣本點(diǎn)向量 x 和包含缺失值的數(shù)據(jù)向量 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;
使用窗長(zhǎng)度為 10 的移動(dòng)中位數(shù)替換 A 中的 NaN 值,并繪制原始數(shù)據(jù)和填充的數(shù)據(jù)。
F = fillmissing(A,'movmedian',10); plot(x,F,'.-') hold on plot(x,A,'.-') legend('Original Data','Filled Data')
如圖所示:
使用自定義填充方法
定義一個(gè)自定義函數(shù),用上一個(gè)非缺失值填充 NaN 值。定義采樣點(diǎn)向量 t 和包含 NaN 值的對(duì)應(yīng)數(shù)據(jù)向量 A。繪制數(shù)據(jù)圖。
t = 10:10:100; A = [0.1 0.2 0.3 NaN NaN 0.6 0.7 NaN 0.9 1]; scatter(t,A)
如圖所示:
使用局部函數(shù) forwardfill(在示例末尾定義)用上一個(gè)非缺失值填充缺失空缺。函數(shù)句柄輸入包括:
- xs - 用于填充的數(shù)據(jù)值
- ts - 用于填充的值相對(duì)于采樣點(diǎn)的位置
- tq - 缺失值相對(duì)于采樣點(diǎn)的位置
- n - 要填充的空缺中的值的數(shù)目
n = 2; gapwindow = [10 0]; [F,TF] = fillmissing(A,@(xs,ts,tq) forwardfill(xs,ts,tq,n),gapwindow,'SamplePoints',t);
空缺窗值 [10 0] 指示 fillmissing 考慮缺失值空缺之前的一個(gè)數(shù)據(jù)點(diǎn),不考慮空缺之后的任何數(shù)據(jù)點(diǎn),因?yàn)樯弦粋€(gè)非缺失值位于空缺之前 10 個(gè)單位。對(duì)于第一個(gè)空缺,由 fillmissing 確定的函數(shù)句柄輸入值為:
- xs = 0.3
- ts = 30
- tq = [40 50]
第二個(gè)空缺的函數(shù)句柄輸入值為:
- xs = 0.7
- ts = 70
- tq = 80
繪制原始數(shù)據(jù)和填充的數(shù)據(jù)。
scatter(t,A) hold on scatter(t(TF),F(TF))
如圖所示:
function y = forwardfill(xs,ts,tq,n) % Fill n values in the missing gap using the previous nonmissing value y = NaN(1,numel(tq)); y(1:min(numel(tq),n)) = xs; end
包含缺失端點(diǎn)的矩陣
創(chuàng)建包含缺失條目的矩陣并使用線性插值填充各列(第二個(gè)維度),一次一行。對(duì)于每行,使用該行中距離最近的非缺失值填充前導(dǎo)和尾隨缺失值。
A = [NaN NaN 5 3 NaN 5 7 NaN 9 NaN; 8 9 NaN 1 4 5 NaN 5 NaN 5; NaN 4 9 8 7 2 4 1 1 NaN] A = 3×10 NaN NaN 5 3 NaN 5 7 NaN 9 NaN 8 9 NaN 1 4 5 NaN 5 NaN 5 NaN 4 9 8 7 2 4 1 1 NaN F = fillmissing(A,'linear',2,'EndValues','nearest') F = 3×10 5 5 5 3 4 5 7 8 9 9 8 9 5 1 4 5 5 5 5 5 4 4 9 8 7 2 4 1 1 1
包含多個(gè)數(shù)據(jù)類型的表
使用不同數(shù)據(jù)類型填充表變量的缺失值。創(chuàng)建表,其變量包括 categorical、double 和 char 數(shù)據(jù)類型。
A = table(categorical({'Sunny'; 'Cloudy'; ''}),[66; NaN; 54],{''; 'N'; 'Y'},[37; 39; NaN],... 'VariableNames',{'Description' 'Temperature' 'Rain' 'Humidity'}) A=3×4 table Description Temperature Rain Humidity ___________ ___________ __________ ________ Sunny 66 {0x0 char} 37 Cloudy NaN {'N' } 39 <undefined> 54 {'Y' } NaN
用上一個(gè)條目的值替換所有缺失的條目。由于 Rain 變量中不存在前一個(gè)元素,缺失的字符向量將不會(huì)被替換。
F = fillmissing(A,'previous') F=3×4 table Description Temperature Rain Humidity ___________ ___________ __________ ________ Sunny 66 {0x0 char} 37 Cloudy 66 {'N' } 39 Cloudy 54 {'Y' } 39
將 A 中 Temperature 和 Humidity 變量的 NaN 值替換為 0。
F = fillmissing(A,'constant',0,'DataVariables',{'Temperature','Humidity'}) F=3×4 table Description Temperature Rain Humidity ___________ ___________ __________ ________ Sunny 66 {0x0 char} 37 Cloudy 0 {'N' } 39 <undefined> 54 {'Y' } 0
參數(shù)說明:
A-輸入數(shù)據(jù),指定為向量、矩陣、多維數(shù)組、字符向量元胞數(shù)組、表或時(shí)間表。
- 如果 A 為時(shí)間表,則僅填充表值。如果關(guān)聯(lián)的行時(shí)間向量包含 NaT 或 NaN 值,則 fillmissing 會(huì)產(chǎn)生錯(cuò)誤。行時(shí)間必須是唯一的并按升序列出。
- 如果 A 是元胞數(shù)組或包含元胞數(shù)組變量的表,則 fillmissing 僅在元胞數(shù)組包含字符向量時(shí)填充缺失元素。
v-填充常量,指定為標(biāo)量、向量或元胞數(shù)組。
- 如果 A 是矩陣或多維數(shù)組,則 v 可以是向量,表示每個(gè)運(yùn)算維度的一個(gè)不同填充值。v 的長(zhǎng)度必須與運(yùn)算維度的長(zhǎng)度相匹配。
- 如果 A 是表或時(shí)間表,則 v 可以是填充值的元胞數(shù)組,表示每個(gè)變量的一個(gè)不同填充值。元胞數(shù)組中的元素?cái)?shù)必須與表中的變量數(shù)目相匹配。
method-填充方法,指定為下列值之一:
方法 | 描述 |
---|---|
'previous' | 上一個(gè)非缺失值 |
'next' | 下一個(gè)非缺失值 |
'nearest' | 距離最近的非缺失值 |
'linear' | 相鄰非缺失值的線性插值(僅限數(shù)值、duration 和 datetime 數(shù)據(jù)類型) |
'spline' | 分段三次樣條插值(僅限數(shù)值、duration 和 datetime 數(shù)據(jù)類型) |
'pchip' | 保形分段三次樣條插值(僅限數(shù)值、duration 和 datetime 數(shù)據(jù)類型) |
'makima' | 修正 Akima 三次 Hermite 插值(僅限數(shù)值、duration 和 datetime 數(shù)據(jù)類型) |
movmethod
— 移窗法
填充缺失數(shù)據(jù)的移動(dòng)方法,指定為下列值之一:
方法 | 描述 |
---|---|
'movmean' | 窗長(zhǎng)度為 window 的移動(dòng)均值(僅限數(shù)值數(shù)據(jù)類型) |
'movmedian' | 窗長(zhǎng)度為 window 的移動(dòng)中位數(shù)(僅限數(shù)值數(shù)據(jù)類型) |
window
— 窗長(zhǎng)度
移動(dòng)方法的窗長(zhǎng)度,指定為正整數(shù)標(biāo)量、由正整數(shù)組成的二元素向量、正持續(xù)時(shí)間標(biāo)量或由正持續(xù)時(shí)間組成的二元素向量。窗是相對(duì)于采樣點(diǎn)定義的。
如果 window 是正整數(shù)標(biāo)量,則窗以當(dāng)前元素為中心并且包含 window-1 個(gè)相鄰元素。如果 window 是偶數(shù),則窗口以當(dāng)前元素和上一個(gè)元素為中心。
如果 window 是由正整數(shù)組成的二元素向量 [b f],則窗口包含當(dāng)前元素、其之前的 b 個(gè)元素和之后的 f 個(gè)元素。
如果 A 是時(shí)間表或 SamplePoints 指定為 datetime 或 duration 向量,則窗口必須為 duration 類型。
k
— 最近鄰的數(shù)量,用 'knn' 方法計(jì)算平均值的最近鄰的數(shù)量,指定為正整數(shù)標(biāo)量。
到此這篇關(guān)于MATLAB中fillmissing函數(shù)用法的文章就介紹到這了,更多相關(guān)MATLAB中fillmissing函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript之Map和Set_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript之Map和Set的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06js實(shí)現(xiàn)html table 行,列鎖定的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)html table 行,列鎖定的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10location.hash保存頁(yè)面狀態(tài)的技巧
hash 屬性是一個(gè)可讀可寫的字符串,該字符串是 URL 的錨部分(從 # 號(hào)開始的部分)。接下來通過本文給大家介紹location.hash保存頁(yè)面狀態(tài)的相關(guān)內(nèi)容,感興趣的朋友一起學(xué)習(xí)吧2016-04-04使用layui實(shí)現(xiàn)的左側(cè)菜單欄以及動(dòng)態(tài)操作tab項(xiàng)方法
今天小編就為大家分享一篇使用layui實(shí)現(xiàn)的左側(cè)菜單欄以及動(dòng)態(tài)操作tab項(xiàng)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09