std
标准差
语法
说明
返回 S
= std(A
)A
沿大小大于 1 的第一个数组维度计算的元素的标准差。默认情况下,标准差按 N-1
实现归一化,其中 N
是观测值数量。
如果
A
是观测值的向量,则S
是标量。如果
A
是一个列为随机变量且行为观测值的矩阵,则S
是一个包含与每列对应的标准差的行向量。如果
A
是多维数组,则std(A)
沿大小大于 1 的第一个数组维度计算,并将这些元素视为向量。此维度中S
的大小变为1
,而所有其他维度的大小仍与在A
中相同。如果
A
是标量,则S
为0
。如果
A
是一个0
×0
的空数组,则S
为NaN
。如果
A
是表或时间表,则std(A)
返回单行表,其中包含每个变量的标准差。 (自 R2023a 起)
在上述任一语法的基础上指定包含还是省略 S
= std(___,missingflag
)A
中的缺失值。例如,std(A,"omitmissing")
在计算标准差时会忽略所有缺失值。默认情况下,std
包括缺失值。
示例
矩阵列的标准差
三维数组的标准差
创建一个三维数组,并计算沿第一个维度的标准差。
A(:,:,1) = [2 4; -2 1]; A(:,:,2) = [9 13; -5 7]; A(:,:,3) = [4 4; 8 -3]; S = std(A)
S = S(:,:,1) = 2.8284 2.1213 S(:,:,2) = 9.8995 4.2426 S(:,:,3) = 2.8284 4.9497
指定标准差权重
创建一个矩阵,并根据权重向量 w
计算每一列的标准差。
A = [1 5; 3 7; -9 2]; w = [1 1 0.5]; S = std(A,w)
S = 1×2
4.4900 1.8330
矩阵行的标准差
创建一个矩阵,并计算每一行的标准差。
A = [6 4 23 -3; 9 -10 4 11; 2 8 -5 1]; S = std(A,0,2)
S = 3×1
11.0303
9.4692
5.3229
数组页的标准差
创建一个三维数组并计算每页数据(行和列)的标准差。
A(:,:,1) = [2 4; -2 1]; A(:,:,2) = [9 13; -5 7]; A(:,:,3) = [4 4; 8 -3]; S = std(A,0,[1 2])
S = S(:,:,1) = 2.5000 S(:,:,2) = 7.7460 S(:,:,3) = 4.5735
排除缺失值的标准差
创建一个包含 NaN
值的矩阵。
A = [1.77 -0.005 NaN -2.95; NaN 0.34 NaN 0.19]
A = 2×4
1.7700 -0.0050 NaN -2.9500
NaN 0.3400 NaN 0.1900
计算矩阵的标准差,不包括缺失值。对于包含任一 NaN
值的矩阵列,std
使用非 NaN
元素进行计算。对于 A
中包含的所有值都是 NaN
的列,标准差为 NaN
。
S = std(A,"omitmissing")
S = 1×4
0 0.2440 NaN 2.2203
在 R2023a 之前:使用 "omitnan"
或 "omitnat"
来忽略缺失值。
标准差和均值
创建一个矩阵,并计算每一列的标准差和均值。
A = [4 -5 1; 2 3 5; -9 1 7]; [S,M] = std(A)
S = 1×3
7.0000 4.1633 3.0551
M = 1×3
-1.0000 -0.3333 4.3333
创建一个矩阵,根据权重向量 w
计算每列的加权标准差和加权均值。
A = [1 5; 3 7; -9 2]; w = [1 1 0.5]; [S,M] = std(A,w)
S = 1×2
4.4900 1.8330
M = 1×2
-0.2000 5.2000
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数组,指定为向量、矩阵、多维数组、表或时间表。如果 A
是标量,则 std(A)
返回 0
。如果 A
是一个 0
×0
的空数组,则 std(A)
返回 NaN
。
数据类型: single
| double
| datetime
| duration
| table
| timetable
复数支持: 是
w
— 粗细
0
(默认) | 1
| 向量
权重,指定为下列值之一:
0
- 按N-1
实现归一化,其中N
是观测值的数量。如果只有一个观测值,则权重为 1。1
- 按N
实现归一化。由非负标量权重构成的向量,这些权重对应于沿其计算方差的
A
维度。
数据类型: single
| double
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
维度 dim
表示长度减至 1
的维度。size(S,dim)
为 1
,而所有其他维度的大小保持不变。
以一个 m
×n
输入矩阵 A
为例:
std(A,0,1)
计算A
的每一列元素的标准差,并返回一个1
×n
行向量。std(A,0,2)
计算A
的每一行元素的标准差,并返回一个m
×1
列向量。
如果 dim
大于 ndims(A)
,则 std(A)
返回大小与 A
相同的由零组成的数组。
vecdim
— 维度向量
正整数向量
维度向量,指定为正整数向量。每个元素代表输入数组的一个维度。指定的操作维度的输出长度为 1,而其他保持不变。
以 2×3×3 输入数组 A
为例。然后 std(A,0,[1 2])
返回 1×1×3 数组,其元素是在 A
的每个页面上计算的标准差。
missingflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "includenat"
| "omitmissing"
| "omitnan"
| "omitnat"
缺失值条件,指定为下表中的值之一。
值 | 输入数据类型 | 描述 |
---|---|---|
"includemissing" (自 R2023a 起) | 所有支持的数据类型 | 在计算标准差时包括 |
"includenan" | double , single , duration | |
"includenat" | datetime | |
"omitmissing" (自 R2023a 起) | 所有支持的数据类型 | 忽略 A 和 w 中的缺失值,并基于较少的点计算标准差。如果运算维度中的所有元素都缺失,则 S 中的对应元素也会缺失。 |
"omitnan" | double , single , duration | |
"omitnat" | datetime |
输出参量
S
— 标准差
标量 | 向量 | 矩阵 | 多维数组 | 表
标准差,以标量、向量、矩阵、多维数组或表形式返回
如果
A
是观测值的向量,则S
是标量。如果
A
是一个列为随机变量且行为观测值的矩阵,则S
是一个包含与每列对应的标准差的行向量。如果
A
是多维数组,则std(A)
沿大小不大于 1 的第一个数组维度计算,并将这些元素视为向量。此维度中S
的大小变为1
,而所有其他维度的大小仍与在A
中相同。如果
A
是标量,则S
为0
。如果
A
是一个0
×0
的空数组,则S
为NaN
。如果
A
是表或时间表,则S
是单行表。 (自 R2023a 起)
M
— 均值
标量 | 向量 | 矩阵 | 多维数组 | 表
均值,以标量、向量、矩阵、多维数组或表形式返回。
如果
A
是观测值的向量,则M
是标量。如果
A
是一个列为随机变量且行为观测值的矩阵,则M
是一个包含与每列对应的均值的行向量。如果
A
是多维数组,则std(A)
沿大小大于 1 的第一个数组维度计算,并将这些元素视为向量。此维度中M
的大小变为1
,而所有其他维度的大小仍与在A
中相同。如果
A
是标量,则M
等于A
。如果
A
是一个0
×0
的空数组,则M
为NaN
。如果
A
是表或时间表,则M
是单行表。 (自 R2023a 起)
如果 S
是加权标准差,则 M
是加权均值。
详细信息
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
C++ 代码生成支持以下语法:
S = std(A)
S = std(A,w)
S = std(A,w,"all")
S = std(A,w,dim)
S = std(A,w,vecdim)
S = std(__,missingflag)
指定时,维度必须为常量。
请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
GPU 代码生成支持以下语法:
S = std(A)
S = std(A,w)
S = std(A,w,"all")
S = std(A,w,dim)
S = std(A,w,vecdim)
S = std(__,missingflag)
如果指定
dim
,则它必须为常量。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2023a: 直接对表和时间表执行计算
std
函数可以对表或时间表中的所有变量执行计算,而无需通过索引访问这些变量。所有变量都必须具有支持计算的数据类型。有关详细信息,请参阅Direct Calculations on Tables and Timetables。
R2023a: 指定缺失值条件
使用 "includemissing"
或 "omitmissing"
选项计算标准差时,包括还是忽略输入数组中的所有缺失值。以前,"includenan"
、"omitnan"
、"includenat"
和 "omitnat"
指定了特定于输入数组的数据类型的缺失值条件。
R2023a: 改进了处理小型组时的性能
在未指定运算维度的情况下对实数向量执行计算时,std
函数的性能得到了改进。与在 R2022b 中相比,在 R2023a 中函数能够更快地确定默认运算维度。
例如,以下代码计算沿默认向量维度的标准差。代码执行速度比上一版本大约快 1.9 倍。
function timingStd A = rand(10,1); for i = 1:8e5 std(A); end end
大致的执行时间是:
R2022b:1.77 秒
R2023a:0.93 秒
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上使用 timeit
函数进行计时的。
timeit(@timingStd)
R2022a: 返回均值或加权均值
现在,std
函数可以通过使用第二个输出参量 M
返回用于计算标准差的输入元素的均值。如果指定了加权方案,则 std
返回加权均值。
R2018b: 对多个维度执行运算
一次对输入数组的多个维度执行运算。指定一个由运算维度组成的向量,或指定 "all"
选项以对所有数组维度执行运算。
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)