movstd
移动标准差
语法
说明
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 = 1x6 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
— 输入数组
向量 | 矩阵 | 多维数组
输入数组,指定为向量、矩阵或多维数组。
数据类型: single
| double
| logical
k
— 窗长度
数值或持续时间标量
窗长度,指定为数值或持续时间标量。当 k
是正整数标量时,中心标准差包括当前位置的元素以及周围的相邻元素。
例如,movstd(A,3)
计算一个由局部三点标准差值组成的数组。
[kb kf]
— 定向窗长度
包含两个元素的数值或持续时间行向量
定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kb
和 kf
为正整数标量时,将基于 kb+kf+1
个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb
个元素以及当前位置后面的 kf
个元素。
例如,movstd(A,[2 1])
计算一个由局部四点标准差值组成的数组。
w
— 粗细
0
(默认) | 1
权重,指定为下列值之一:
0
- 按k-1
进行归一化,其中k
是窗长度。如果k=1
,则权重为k
。1
- 按k
实现归一化。
数据类型: single
| double
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
维度 dim
表示 movstd
运算所沿的维度,即指定窗的移动方向。
以一个 m
×n
输入矩阵 A
为例:
movstd(A,k,0,1)
为A
的每列计算包含k
个元素的移动标准差,并返回一个m
×n
矩阵。movstd(A,k,0,2)
为A
的每行计算包含k
个元素的移动标准差,并返回一个m
×n
矩阵。
nanflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "omitmissing"
| "omitnan"
缺失值条件,指定为下列值之一:
"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")
Endpoints
— 窗口接近端点时的处理方法
"shrink"
(默认) | "discard"
| "fill"
| 数值或逻辑标量
窗口接近端点时的处理方法,指定为以下选项之一:
值 | 描述 |
---|---|
"shrink" | 在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。 |
"discard" | 当窗不与现有元素完全重叠时,不输出任何标准差值。 |
"fill" | 将不存在的元素替换为 NaN 值。 |
数值或逻辑标量 | 将不存在的元素替换为指定的数值或逻辑值。 |
SamplePoints
— 用于计算标准差的样本点
向量
用于计算标准差的样本点,指定为向量。样本点表示数据在 A
中的位置。样本点不需要均匀采样。默认情况下,样本点向量为 [1 2 3 ... ]
。
移动窗相对于样本点定义,样本点必须已排序并且包含唯一的元素。例如,如果 t
是与输入数据对应的时间向量,则 movstd(rand(1,10),3,"SamplePoints",t)
将有一个代表 t(i)-1.5
和 t(i)+1.5
之间时间间隔的窗。
当样本点向量的数据类型为 datetime
或 duration
时,移动窗长度的类型必须为 duration
。
如果样本点的间距不均匀并且指定了 Endpoints
,则其值必须为 "shrink"
。
详细信息
标准差
对于由 N 个标量观测值组成的有限长向量 A,标准差定义为
,其中 μ 是 A:
的均值。标准差是方差的平方根。有些标准差的定义使用 N(而非 N-1)的归一化因子,这种情况下您可以通过将 w
设置为 1
来进行指定。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2016a 中推出R2023a: 指定缺失值条件
使用 "includemissing"
或 "omitmissing"
选项计算每个标准差时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
R2023a: 改进了使用样本点计算矩阵时的性能
当存在样本点时,movstd
函数对矩阵进行计算时的性能得到了改进。
例如,以下代码计算一个 300×300 矩阵与对应样本点的移动标准差。其执行速度比上一版本大约快 2.3 倍。
function timingMovstd A = randn(300); t = sort(rand(300,1)); tic for k = 1:2000 movstd(A,0.1,"SamplePoints",t); end toc end
大致的执行时间是:
R2022b:1.49 秒
R2023a:0.64
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上通过调用 timingMovstd
函数进行计时的。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)