Matlab数据处理之移动中位数movmedian函数

4.7
(3)

Matlab中可以使用movmedian函数来获取一组数据的移动中位数。移动中位数指的是,局部 k 个数据点的中位数值组成的数组。关于中位数函数median的文章,可以参考:《Matlab数据处理之median函数获取数组中值》。

Matlab数据处理之移动中位数movmedian函数

本文主要讲解Matlab中movmedian函数的常见用法、语法说明、以及一些相关实例。首先,给出movmedian函数的帮助文档如下:

>> help movmedian
 movmedian   Moving median value.
    Y = movmedian(X,K) for a vector X and positive integer scalar K
    computes a centered moving median by sliding a window of length K along
    X. Each element of Y is the local median of the corresponding values of
    X inside the window, with Y the same size as X. When K is even, the
    window is centered about the current and previous elements of X. The
    sliding window is truncated at the endpoints where there are fewer than
    K elements from X to fill the window.
    
    For N-D arrays, movmedian operates along the first array dimension
    whose size does not equal 1.
 
    Y = movmedian(X,[NB NF]) for a vector X and nonnegative integers NB and
    NF computes a moving median along the length of X, returning the local
    median of the previous NB elements, the current element, and the next
    NF elements of X.
 
    Y = movmedian(...,DIM) operates along dimension DIM of X.
 
    movmedian(...,MISSING) specifies how NaN (Not-a-Number) values are
    treated and can be one of the following:
 
        'includenan'   - (default) the median of any window containing NaN
                         values is also NaN.
        'omitnan'      - the median of any window containing NaN values is
                         the median of all its non-NaN elements. If all
                         elements are NaN, the result is NaN.
 
    movmedian(...,'Endpoints',ENDPT) controls how the median is calculated
    at the endpoints of X, where there are not enough elements to fill the
    window. ENDPT can be either a scalar numeric or logical value or one of
    the following:
 
        'shrink'    - (default) compute the median over the number of
                      elements of X that are inside the window, effectively
                      reducing the window size to fit X at the endpoints.
        'fill'      - compute the median over the full window size, filling
                      missing values from X with NaN. This is equivalent to
                      padding X with NaN at the endpoints.
        'discard'   - compute the median only when the window is filled
                      with elements of X, discarding partial endpoint
                      calculations and their corresponding elements in Y.
                      This truncates the output; for a vector X and window
                      length K, Y has length LENGTH(X)-K+1.
                      
    When ENDPT is a scalar numeric or logical value, the missing elements
    of X inside the window are replaced with that value and Y remains the
    same size as X.
 
    Example: Compute a 5-point centered moving median.
        t = 1:10;
        x = [4 8 6 -1 -2 -3 -1 3 4 5];
        yc = movmedian(x,5);
        plot(t,x,t,yc);
 
    Example: Compute a 5-point trailing moving median.
        t = 1:10;
        x = [4 8 6 -1 -2 -3 -1 3 4 5];
        yt = movmedian(x,[4 0]);
        plot(t,x,t,yt);
 
    Example: Compute a 5-point centered moving median, padding the ends of
    the input with NaN.
        t = 1:10;
        x = [4 8 6 -1 -2 -3 -1 3 4 5];
        yp = movmedian(x,5,'Endpoints','fill');
        plot(t,x,t,yp);
 
    Example: Compute a 5-point trailing moving median, ignoring the first 4
    window shifts that do not contain 5 input elements.
        x = [4 8 6 -1 -2 -3 -1 3 4 5];
        yd = movmedian(x,[4 0],'Endpoints','discard');

movmedian函数常见用法

M = movmedian(A,k)
M = movmedian(A,[kb kf])
M = movmedian(___,dim)
M = movmedian(___,nanflag)
M = movmedian(___,Name,Value)

movmedian函数语法说明

M = movmedian(A,k) 返回由局部 k 个数据点的中位数值组成的数组,其中每个中位数基于 A 的相邻元素的长度为 k 的滑动窗计算得出。当 k 为奇数时,窗口以当前位置的元素为中心。当 k 为偶数时,窗口以当前元素及其前一个元素为中心。当没有足够的元素填满窗口时,窗口将自动在端点处截断。当窗口被截断时,只根据窗口内的元素计算中位数。M 与 A 的大小相同。

  • 如果 A 是向量,movmedian 将沿向量 A 的长度运算。
  • 如果 A 是多维数组,则 movmedian 沿 A 的大小不等于 1 的第一个维度进行运算。

M = movmedian(A,[kb kf]) 通过长度为 kb+kf+1 的窗口计算中位数,其中包括当前位置的元素、后面的 kb 个元素和前面的 kf 个元素。

M = movmedian(_,dim) 为上述任一语法指定 A 的运算维度。例如,如果 A 是矩阵,则 movmedian(A,k,2) 沿 A 的列运算,计算每行的 k 个元素的移动中位数。

M = movmedian(_,nanflag) 指定在上述任意语法的计算中包括还是忽略 NaN 值。movmedian(A,k,’includenan’) 会在计算中包括所有 NaN 值,而 movmedian(A,k,’omitnan’) 则忽略这些值并基于较少的点计算中位数。

M = movmedian(_,Name,Value) 使用一个或多个名称-值对组参数指定移动中位数的其他参数。例如,如果 x 是时间值向量,则 movmedian(A,k,’SamplePoints’,x) 相对于 x 中的时间计算移动中位数。

movmedian函数实例

向量的中心移动中位数

计算行向量的三点中心移动中位数。当端点处的窗口中少于三个元素时,将根据可用元素计算平均值。

>> A = [4 8 6 -1 -2 -3 -1 3 4 5];
>> M = movmedian(A,3)

M =

    6.0000    6.0000    6.0000   -1.0000   -2.0000   -2.0000   -1.0000    3.0000    4.0000    4.5000

向量的尾部移动中位数

计算行向量的三点尾部移动中位数。当端点处的窗口中少于三个元素时,将根据可用元素计算平均值。

>> A = [4 8 6 -1 -2 -3 -1 3 4 5];
>> M = movmedian(A,[2 0])

M =

     4     6     6     6    -1    -2    -2    -1     3     4

矩阵的移动中位数

计算矩阵中每行的三点中心移动中位数。窗口从第一行开始,沿水平方向移动到该行的末尾,然后移到第二行,依此类推。维度参数为 2,即跨 A 的列移动窗口。

>> A = [4 8 6; -1 -2 -3; -1 3 4]

A =

     4     8     6
    -1    -2    -3
    -1     3     4

>> M = movmedian(A,3,2)

M =

    6.0000    6.0000    7.0000
   -1.5000   -2.0000   -2.5000
    1.0000    3.0000    3.5000
Matlab数据处理之移动中位数movmedian函数

包含 NaN 元素的向量的移动中位数

计算包含 NaN 元素的行向量的三点中心移动中位数。

>> A = [4 8 NaN -1 -2 -3 NaN 3 4 5];
>> M = movmedian(A,3)

M =

    6.0000       NaN       NaN       NaN   -2.0000       NaN       NaN       NaN    4.0000    4.5000

重新计算中位数,但忽略 NaN 值。当 movmedian 舍弃 NaN 元素时,它将根据窗口中的剩余元素计算中位数。

>> M = movmedian(A,3,'omitnan')

M =

    6.0000    6.0000    3.5000   -1.5000   -2.0000   -2.5000         0    3.5000    4.0000    4.5000
Matlab数据处理之移动中位数movmedian函数

基于样本点计算移动中位数

根据时间向量 t,计算 A 中数据的 3 小时中心移动中位数。

>> A = [4 8 6 -1 -2 -3];
>> k = hours(3);
>> t = datetime(2016,1,1,0,0,0) + hours(0:5)

t = 

1 至 5 列

   2016-01-01 00:00:00   2016-01-01 01:00:00   2016-01-01 02:00:00   2016-01-01 03:00:00   2016-01-01 04:00:00

6 列

   2016-01-01 05:00:00
>> M = movmedian(A,k,'SamplePoints',t)
错误使用 movmedian
窗口长度必须为有限标量正整数,或者为包含有限非负整数的 2 元矢量。

上述代码报错,说明版本我支持,我这里用的是Matlab 2016b,太过老旧,懒得更新了。

仅返回满窗口中位数

计算行向量的三点中心移动中位数,但在输出中舍弃使用的点数少于三个的计算。也就是说,只返回从满的三元素窗口计算的中位数,而舍弃端点计算。

>> A = [4 8 6 -1 -2 -3 -1 3 4 5];
>> M = movmedian(A,3,'Endpoints','discard')

M =

     6     6    -1    -2    -2    -1     3     4
Matlab数据处理之移动中位数movmedian函数

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/4123.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2023年02月21日 19:13
下一篇 2023年03月01日 20:11

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号