• MATLAB中fillmissing函数用法


    目录

    语法

    说明

    示例

    包含 NaN 值的向量

    由 NaN 值组成的矩阵

    插入缺失数据

    使用移动中位数方法

    使用自定义填充方法

    包含缺失端点的矩阵

    包含多个数据类型的表


            fillmissing函数的功能是填充缺失的条目。

    语法

    1. F = fillmissing(A,'constant',v)
    2. F = fillmissing(A,method)
    3. F = fillmissing(A,movmethod,window)
    4. F = fillmissing(A,'knn')
    5. F = fillmissing(A,'knn',k)
    6. F = fillmissing(A,fillfun,gapwindow)
    7. F = fillmissing(___,dim)
    8. F = fillmissing(___,Name,Value)
    9. [F,TF] = fillmissing(___)

    说明

            ​F = fillmissing(A,'constant',v) 使用常量值 v 填充缺失的数组或表条目。如果 A 是矩阵或多维数组,则 v 可以是标量或向量。如果 v 是向量,则每个元素指定 A 的对应列中的填充值。如果 A 是表或时间表,则 v 也可以是元胞数组,其元素包含每个表变量的填充值。

    缺失值的定义取决于 A 的数据类型

    • NaN - double、single、duration 和 calendarDuration

    • NaT — datetime

    • — string

    • — categorical

    • {''} - 字符向量的 cell

    如果 A 是表,则每个变量的数据类型定义该变量的缺失值。

            ​F = fillmissing(A,method) 使用 method 指定的方法填充缺失的条目。例如,fillmissing(A,'previous') 对 A 中的缺失条目使用上一个非缺失条目进行填充。

            ​F = fillmissing(A,movmethod,window) 使用窗长度为 window 的移动窗均值或中位数填充缺失条目。例如,fillmissing(A,'movmean',5) 使用窗长度为 5 的移动均值填充缺失数据。

            F = fillmissing(A,'knn') 用最近邻行中的对应值填充缺失条目,这些值是根据行之间的成对欧几里德距离计算的。

            F = fillmissing(A,'knn',k) 用 k 最近邻行中对应值的均值填充缺失条目,该均值是根据行之间的成对欧几里德距离计算的。例如,fillmissing(A,'knn',5) 用五个最近邻行中对应值的均值填充 A 中的缺失条目。

            F = fillmissing(A,fillfun,gapwindow) 使用由函数句柄 fillfun 指定的自定义方法填充缺失条目的空缺,并在每个空缺周围设置固定窗,从该窗计算填充值。fillfun 必须具有输入参数 xs、ts 和 tq,它们是向量,分别包含长度为 gapwindow 的采样数据 xs、长度为 gapwindow 的采样数据位置 ts 和缺失数据位置 tq。ts 和 tq 中的位置是采样点向量的子集。

            F = fillmissing(___,dim) 支持上述语法中的任何输入参数组合,且可指定 A 中要进行运算的维度。默认情况下,fillmissing 沿其大小不为 1 的第一个维度进行运算。例如,如果 A 是矩阵,则 fillmissing(A,2) 跨 A 的各列进行运算,逐行填充缺失的数据。

            F = fillmissing(___,Name,Value) 使用一个或多个名称-值参数指定用于填充缺失值的其他参数。例如,如果 t 是时间值向量,则 fillmissing(A,'linear','SamplePoints',t) 会基于 t 中的时间值对 A 中的数据进行插值。

            ​[F,TF] = fillmissing(___) 还返回逻辑数组 TF,该数组指示 F 中先前缺失现已填充的条目的位置。

    示例

    包含 NaN 值的向量

            创建包含 NaN 值的向量,并使用前一个非缺失值替换每个 NaN。

    1. A = [1 3 NaN 4 NaN NaN 5];
    2. F = fillmissing(A,'previous')
    3. F = 1×7
    4. 1 3 3 4 4 4 5

    由 NaN 值组成的矩阵

            创建一个 2×2 矩阵,每列有一个 NaN 值。在第一列中用 100 填充 NaN,在第二列中用 1000 填充。

    1. A = [1 NaN; NaN 2]
    2. A = 2×2
    3. 1 NaN
    4. NaN 2
    5. F = fillmissing(A,'constant',[100 1000])
    6. F = 2×2
    7. 1 1000
    8. 100 2

    插入缺失数据

            使用插值来替换非均匀采样的数据中的 NaN 值。定义非均匀采样点向量,并计算这些点上的正弦函数。

    1. x = [-4*pi:0.1:0, 0.1:0.2:4*pi];
    2. A = sin(x);

    将 NaN 值插入 A 中。

    A(A < 0.75 & A > 0.5) = NaN;

            使用线性插值填充缺失数据,并返回填充的向量 F 和逻辑向量 TF。TF 项中的值 1 (true) 对应于 F 中的填充值。

    [F,TF] = fillmissing(A,'linear','SamplePoints',x);

    绘制原始数据和填充的数据。

    1. scatter(x,A)
    2. hold on
    3. scatter(x(TF),F(TF))
    4. legend('Original Data','Filled Data')

    如图所示:

    使用移动中位数方法

            使用移动中位数填充缺失的数值数据。创建样本点向量 x 和包含缺失值的数据向量 A。

    1. x = linspace(0,10,200);
    2. A = sin(x) + 0.5*(rand(size(x))-0.5);
    3. A([1:10 randi([1 length(x)],1,50)]) = NaN;

            使用窗长度为 10 的移动中位数替换 A 中的 NaN 值,并绘制原始数据和填充的数据。

    1. F = fillmissing(A,'movmedian',10);
    2. plot(x,F,'.-')
    3. hold on
    4. plot(x,A,'.-')
    5. legend('Original Data','Filled Data')

    如图所示:

    使用自定义填充方法

            定义一个自定义函数,用上一个非缺失值填充 NaN 值。定义采样点向量 t 和包含 NaN 值的对应数据向量 A。绘制数据图。

    1. t = 10:10:100;
    2. A = [0.1 0.2 0.3 NaN NaN 0.6 0.7 NaN 0.9 1];
    3. scatter(t,A)

    如图所示:

            使用局部函数 forwardfill(在示例末尾定义)用上一个非缺失值填充缺失空缺。函数句柄输入包括:

    • xs - 用于填充的数据值

    • ts - 用于填充的值相对于采样点的位置

    • tq - 缺失值相对于采样点的位置

    • n - 要填充的空缺中的值的数目

    1. n = 2;
    2. gapwindow = [10 0];
    3. [F,TF] = fillmissing(A,@(xs,ts,tq) forwardfill(xs,ts,tq,n),gapwindow,'SamplePoints',t);

            空缺窗值 [10 0] 指示 fillmissing 考虑缺失值空缺之前的一个数据点,不考虑空缺之后的任何数据点,因为上一个非缺失值位于空缺之前 10 个单位。对于第一个空缺,由 fillmissing 确定的函数句柄输入值为:

    • xs = 0.3

    • ts = 30

    • tq = [40 50]

    第二个空缺的函数句柄输入值为:

    • xs = 0.7

    • ts = 70

    • tq = 80

    绘制原始数据和填充的数据。

    1. scatter(t,A)
    2. hold on
    3. scatter(t(TF),F(TF))

    如图所示:

    1. function y = forwardfill(xs,ts,tq,n)
    2. % Fill n values in the missing gap using the previous nonmissing value
    3. y = NaN(1,numel(tq));
    4. y(1:min(numel(tq),n)) = xs;
    5. end

    包含缺失端点的矩阵

            创建包含缺失条目的矩阵并使用线性插值填充各列(第二个维度),一次一行。对于每行,使用该行中距离最近的非缺失值填充前导和尾随缺失值。

    1. A = [NaN NaN 5 3 NaN 5 7 NaN 9 NaN;
    2. 8 9 NaN 1 4 5 NaN 5 NaN 5;
    3. NaN 4 9 8 7 2 4 1 1 NaN]
    4. A = 3×10
    5. NaN NaN 5 3 NaN 5 7 NaN 9 NaN
    6. 8 9 NaN 1 4 5 NaN 5 NaN 5
    7. NaN 4 9 8 7 2 4 1 1 NaN
    8. F = fillmissing(A,'linear',2,'EndValues','nearest')
    9. F = 3×10
    10. 5 5 5 3 4 5 7 8 9 9
    11. 8 9 5 1 4 5 5 5 5 5
    12. 4 4 9 8 7 2 4 1 1 1

    包含多个数据类型的表

            使用不同数据类型填充表变量的缺失值。创建表,其变量包括 categorical、double 和 char 数据类型。

    1. A = table(categorical({'Sunny'; 'Cloudy'; ''}),[66; NaN; 54],{''; 'N'; 'Y'},[37; 39; NaN],...
    2. 'VariableNames',{'Description' 'Temperature' 'Rain' 'Humidity'})
    3. A=3×4 table
    4. Description Temperature Rain Humidity
    5. ___________ ___________ __________ ________
    6. Sunny 66 {0x0 char} 37
    7. Cloudy NaN {'N' } 39
    8. 54 {'Y' } NaN

            用上一个条目的值替换所有缺失的条目。由于 Rain 变量中不存在前一个元素,缺失的字符向量将不会被替换。

    1. F = fillmissing(A,'previous')
    2. F=3×4 table
    3. Description Temperature Rain Humidity
    4. ___________ ___________ __________ ________
    5. Sunny 66 {0x0 char} 37
    6. Cloudy 66 {'N' } 39
    7. Cloudy 54 {'Y' } 39

            将 A 中 Temperature 和 Humidity 变量的 NaN 值替换为 0。

    1. F = fillmissing(A,'constant',0,'DataVariables',{'Temperature','Humidity'})
    2. F=3×4 table
    3. Description Temperature Rain Humidity
    4. ___________ ___________ __________ ________
    5. Sunny 66 {0x0 char} 37
    6. Cloudy 0 {'N' } 39
    7. 54 {'Y' } 0

    参数说明:

    A-输入数据,指定为向量、矩阵、多维数组、字符向量元胞数组、表或时间表。

    • 如果 A 为时间表,则仅填充表值。如果关联的行时间向量包含 NaT 或 NaN 值,则 fillmissing 会产生错误。行时间必须是唯一的并按升序列出。

    • 如果 A 是元胞数组或包含元胞数组变量的表,则 fillmissing 仅在元胞数组包含字符向量时填充缺失元素。

    v-填充常量,指定为标量、向量或元胞数组。

    • 如果 A 是矩阵或多维数组,则 v 可以是向量,表示每个运算维度的一个不同填充值。v 的长度必须与运算维度的长度相匹配。

    • 如果 A 是表或时间表,则 v 可以是填充值的元胞数组,表示每个变量的一个不同填充值。元胞数组中的元素数必须与表中的变量数目相匹配。

    method-填充方法,指定为下列值之一:

    方法描述
    'previous'上一个非缺失值
    'next'下一个非缺失值
    'nearest'距离最近的非缺失值
    'linear'相邻非缺失值的线性插值(仅限数值、duration 和 datetime 数据类型)
    'spline'分段三次样条插值(仅限数值、duration 和 datetime 数据类型)
    'pchip'保形分段三次样条插值(仅限数值、duration 和 datetime 数据类型)
    'makima'修正 Akima 三次 Hermite 插值(仅限数值、duration 和 datetime 数据类型)

    movmethod — 移窗法

    填充缺失数据的移动方法,指定为下列值之一:

    方法描述
    'movmean'窗长度为 window 的移动均值(仅限数值数据类型)
    'movmedian'窗长度为 window 的移动中位数(仅限数值数据类型)

    window — 窗长度
            移动方法的窗长度,指定为正整数标量、由正整数组成的二元素向量、正持续时间标量或由正持续时间组成的二元素向量。窗是相对于采样点定义的。

            如果 window 是正整数标量,则窗以当前元素为中心并且包含 window-1 个相邻元素。如果 window 是偶数,则窗口以当前元素和上一个元素为中心。

            如果 window 是由正整数组成的二元素向量 [b f],则窗口包含当前元素、其之前的 b 个元素和之后的 f 个元素。

            如果 A 是时间表或 SamplePoints 指定为 datetime 或 duration 向量,则窗口必须为 duration 类型。

    k — 最近邻的数量,用 'knn' 方法计算平均值的最近邻的数量,指定为正整数标量。

  • 相关阅读:
    Django路由层解析
    YOLOV8的tensorrt部署详解(目标检测模型-cpp)
    AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画
    LVS负载均衡群集
    👋 和我一起学 Three.js【初级篇】:0. 总论
    第4章 C语言高级的关键字
    Java容器详解(浅层)
    centos 6使用yum安装软件
    微信还有哪些你不知道的神奇能力?
    docker-compose
  • 原文地址:https://blog.csdn.net/jk_101/article/details/132742345