主要内容

movstd

移动标准差

说明

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

  • 如果 A 是向量,movstd 将沿向量 A 的长度运算。

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

  • 如果 A 是表或时间表,则 movstd 沿 A 的变量进行运算。 (自 R2025a 起)

示例

M = movstd(A,[kb kf]) 计算长度为 kb+kf+1 的窗口的标准差。该计算包括当前位置的元素、后面的 kb 个元素和前面的 kf 个元素。

示例

M = movstd(___,w) 为上述任意语法指定归一化因子。当 w = 0 时(默认值),Mk-1 对窗长度 k 进行归一化。当 w = 1 时,Mk 进行归一化。

示例

M = movstd(___,w,dim) 为上述任一语法指定 A 的运算维度。指定 dim 时,始终在上述语法中指定权重 w。例如,movstd(A,k,0,2) 沿矩阵 A 的列进行运算,计算每一行的 k 个元素的移动标准差。归一化因子是默认值 k-1

示例

M = movstd(___,nanflag) 指定包含还是省略 A 中的 NaN 值。例如,movstd(A,k,"omitnan") 在计算每个标准差时忽略 NaN 值。默认情况下,movstd 包括 NaN 值。

示例

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

示例

示例

全部折叠

计算行向量的三点中心移动标准差。当端点处的窗口中少于三个元素时,将根据可用元素计算标准差。

A = [4 8 6 -1 -2 -3 -1 3 4 5];
M = movstd(A,3)
M = 1×10

    2.8284    2.0000    4.7258    4.3589    1.0000    1.0000    3.0551    2.6458    1.0000    0.7071

计算行向量的三点尾部移动标准差。当端点处的窗口中少于三个元素时,将根据可用元素计算标准差。

A = [4 8 6 -1 -2 -3 -1 3 4 5];
M = movstd(A,[2 0])
M = 1×10

         0    2.8284    2.0000    4.7258    4.3589    1.0000    1.0000    3.0551    2.6458    1.0000

计算行向量的三点中心移动标准差,并按照窗口中的元素数对每个标准差进行归一化。

A = [4 8 6 -1 -2 -3 -1 3 4 5];
M = movstd(A,3,1)
M = 1×10

    2.0000    1.6330    3.8586    3.5590    0.8165    0.8165    2.4944    2.1602    0.8165    0.5000

计算矩阵中每行的三点中心移动标准差。窗从第一行开始,沿水平方向移动到该行的末尾,然后移到第二行,依此类推。维度参量为 2,即跨 A 的列移动窗。指定维度时,始终指定归一化因子。

A = [4 8 6; -1 -2 -3; -1 3 4];
M = movstd(A,3,0,2)
M = 3×3

    2.8284    2.0000    1.4142
    0.7071    1.0000    0.7071
    2.8284    2.6458    0.7071

创建一个包含 NaN 值的行向量。

A = [4 8 NaN -1 -2 -3 NaN 3 4 5];

计算向量的三点中心移动标准差,不包括 NaN 值。对于包含任一 NaN 值的窗,movstd 使用非 NaN 元素进行计算。

M = movstd(A,3,"omitnan")
M = 1×10

    2.8284    2.8284    6.3640    0.7071    1.0000    0.7071    4.2426    0.7071    1.0000    0.7071

根据时间向量 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×6 datetime
   01-Jan-2016 00:00:00   01-Jan-2016 01:00:00   01-Jan-2016 02:00:00   01-Jan-2016 03:00:00   01-Jan-2016 04:00:00   01-Jan-2016 05:00:00

M = movstd(A,k,"SamplePoints",t)
M = 1×6

    2.8284    2.0000    4.7258    4.3589    1.0000    0.7071

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

A = [4 8 6 -1 -2 -3 -1 3 4 5];
M = movstd(A,3,"Endpoints","discard")
M = 1×8

    2.0000    4.7258    4.3589    1.0000    1.0000    3.0551    2.6458    1.0000

从幻方的列创建一个表。

A = magic(3);
T = array2table(A)
T=3×3 table
    A1    A2    A3
    __    __    __

    8     1     6 
    3     5     7 
    4     9     2 

使用 movstd 计算表变量的移动标准差。

M = movstd(T,3)
M=3×3 table
      A1         A2        A3   
    _______    ______    _______

     3.5355    2.8284    0.70711
     2.6458         4     2.6458
    0.70711    2.8284     3.5355

要仅为指定的变量计算移动标准差,请指定 DataVariables 名称-值参量。

M2 = movstd(T,3,DataVariables=["A2" "A3"])
M2=3×3 table
    A1      A2        A3   
    __    ______    _______

    8     2.8284    0.70711
    3          4     2.6458
    4     2.8284     3.5355

要将移动标准差追加到表而不是替换值,请将 ReplaceValues 指定为 false

M3 = movstd(T,3,ReplaceValues=false)
M3=3×6 table
    A1    A2    A3    A1_movstd    A2_movstd    A3_movstd
    __    __    __    _________    _________    _________

    8     1     6       3.5355      2.8284       0.70711 
    3     5     7       2.6458           4        2.6458 
    4     9     2      0.70711      2.8284        3.5355 

输入参数

全部折叠

输入数据,指定为向量、矩阵、多维数组、表或时间表。

数据类型: single | double | logical | table | timetable

窗长度,指定为数值或持续时间标量。当 k 是正整数标量时,中心标准差包括当前位置的元素以及周围的相邻元素。

例如,movstd(A,3) 计算一个由局部三点标准差值组成的数组。

movstd(A,3) computation. The elements in the sample window are 1, 3, and 5, so the resulting local standard deviation is 2.

定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kbkf 为正整数标量时,将基于 kb+kf+1 个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb 个元素以及当前位置后面的 kf 个元素。

例如,movstd(A,[2 1]) 计算一个由局部四点标准差值组成的数组。

movstd(A,[2 1]) computation. The elements in the sample window are 4, 1, 3, and 5, so the resulting local standard deviation is 1.71.

权重,指定为下列值之一:

  • 0 - 按 k-1 进行归一化,其中 k 是窗长度。如果 k=1,则权重为 k

  • 1 - 按 k 实现归一化。

数据类型: single | double

沿其运算的维度,指定为正整数标量。如果不指定维度,则默认值是大小不等于 1 的第一个数组维度。

维度 dim 表示 movstd 运算所沿的维度,即指定窗的移动方向。

以一个 m×n 输入矩阵 A 为例:

  • movstd(A,k,0,1)A 的每列计算包含 k 个元素的移动标准差,并返回一个 m×n 矩阵。

    movstd(A,k,0,1) column-wise operation

  • movstd(A,k,0,2)A 的每行计算包含 k 个元素的移动标准差,并返回一个 m×n 矩阵。

    movstd(A,k,0,2) row-wise operation

如果 A 是表或时间表,则无法指定 dimmovstd 函数始终沿表和时间表的变量进行运算。 (自 R2025a 起)

缺失值条件,指定为下列值之一:

  • "includemissing""includenan" - 在计算每个标准差时包括 A 中的 NaN 值。如果窗中的任一元素是 NaN,则 M 中的对应元素是 NaN"includemissing""includenan" 具有相同的行为。

  • "omitmissing""omitnan" - 忽略 A 中的 NaN 值,并基于较少的点计算每个标准差。如果窗中的所有元素都是 NaN,则 M 中的对应元素是 NaN"omitmissing""omitnan" 具有相同的行为。

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: M = movstd(A,k,"Endpoints","fill")

窗口接近端点时的处理方法,指定为以下选项之一:

描述
"shrink"在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。
"discard"

当窗不与现有元素完全重叠时,不输出任何标准差值。

如果 A 是表或时间表,则无法将 Endpoints 指定为 "discard"

"fill"将不存在的元素替换为 NaN 值。
数值或逻辑标量将不存在的元素替换为指定的数值或逻辑值。

用于计算标准差的采样点,指定为向量。采样点表示数据在 A 中的位置。采样点不需要均匀采样。默认情况下,采样点向量为 [1 2 3 ... ]

移动窗相对于采样点定义,采样点必须已排序并且包含唯一的元素。例如,如果 t 是与输入数据对应的时间向量,则 movstd(rand(1,10),3,"SamplePoints",t) 将有一个代表 t(i)-1.5t(i)+1.5 之间时间间隔的窗。

当采样点向量的数据类型为 datetimeduration 时,移动窗长度的类型必须为 duration

如果采样点的间距不均匀并且指定了 Endpoints,则其值必须为 "shrink"

自 R2025a 起

要对其进行操作的表或时间表变量,指定为下表中的选项之一。

  • 如果未指定 DataVariables,则 movstd 对所有变量进行运算。此行为是默认行为。

  • 如果指定 DataVariables,则 movstd 只对指定的变量进行运算。未由 DataVariables 指定的其他变量会传递给输出,而不会对其进行修改。

索引方案要指定的值示例

变量名称

  • 字符串标量或字符向量

  • 字符串数组或字符向量元胞数组

  • pattern 对象

  • "A"'A' - 名为 A 的变量

  • ["A" "B"]{'A','B'} - 两个名为 AB 的变量

  • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

变量索引

  • 引用变量在表中位置的索引编号

  • 由数字组成的向量

  • 一个 logical 向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0 (false) 值。

  • 3 - 表中的第三个变量

  • [2 3] - 表中的第二个和第三个变量

  • [false false true] - 第三个变量

函数句柄

  • 函数句柄,以表变量作为输入并返回 logical 标量

  • @isnumeric - 所有包含数值的变量

变量类型:

  • vartype 下标,用于选择指定类型的变量

  • vartype("numeric") - 所有包含数值的变量

自 R2025a 起

替换值指示符,当 A 是表或时间表时,指定为以下值之一。

  • true1 - 在输出表或时间表中,用包含 movstd 输出值的变量替换输入表或时间表变量。

  • false0 - 将包含 movstd 输出值的变量追加到输出表或时间表中。

对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues

详细信息

全部折叠

扩展功能

全部展开

版本历史记录

在 R2016a 中推出

全部展开

另请参阅

函数