var
方差
语法
说明
返回 V
= var(A
)A
沿大小大于 1 的第一个数组维度计算的元素的方差。默认情况下,方差按 N-1
实现归一化,其中 N
是观测值数量。
如果
A
是观测值的向量,则V
是标量。如果
A
是一个列为随机变量且行为观测值的矩阵,则V
是一个包含与每列对应的方差的行向量。如果
A
是多维数组,则var(A)
沿大小大于 1 的第一个数组维度计算,并将这些元素视为向量。此维度中V
的大小变为1
,而所有其他维度的大小仍与在A
中相同。如果
A
是标量,则V
为0
。如果
A
是一个0
×0
的空数组,则V
为NaN
。如果
A
是表或时间表,则var(A)
返回单行表,其中包含每个变量的方差。 (自 R2023a 起)
示例
矩阵方差
数组方差
创建一个三维数组并计算其方差。
A(:,:,1) = [1 3; 8 4]; A(:,:,2) = [3 -4; 1 2]; var(A)
ans = ans(:,:,1) = 24.5000 0.5000 ans(:,:,2) = 2 18
指定方差权重向量
创建一个矩阵并根据权重向量 w
计算其方差。
A = [5 -4 6; 2 3 9; -1 1 2]; w = [0.5 0.25 0.25]; var(A,w)
ans = 1×3
6.1875 9.5000 6.1875
指定方差的维度
创建一个矩阵并沿第一个维度计算其方差。
A = [4 -2 1; 9 5 7]; var(A,0,1)
ans = 1×3
12.5000 24.5000 18.0000
沿第二个维度计算 A
的方差。
var(A,0,2)
ans = 2×1
9
4
数组页的方差
创建一个三维数组并计算每页数据(行和列)的方差。
A(:,:,1) = [2 4; -2 1]; A(:,:,2) = [9 13; -5 7]; A(:,:,3) = [4 4; 8 -3]; V = var(A,0,[1 2])
V = V(:,:,1) = 6.2500 V(:,:,2) = 60 V(:,:,3) = 20.9167
排除缺失值的方差
创建一个包含 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
值。对于包含任一 NaN
值的矩阵列,var
使用非 NaN
元素进行计算。对于包含的值都是 NaN
的矩阵列,方差为 NaN
。
V = var(A,"omitnan")
V = 1×4
0 0.0595 NaN 4.9298
方差和均值
创建一个矩阵并计算每列的方差和均值。
A = [4 -7 3; 1 4 -2; 10 7 9]; [V,M] = var(A)
V = 1×3
21.0000 54.3333 30.3333
M = 1×3
5.0000 1.3333 3.3333
创建一个矩阵,根据权重向量 w
计算每列的加权方差和加权均值。
A = [5 -4 6; 2 3 9; -1 1 2]; w = [0.5 0.25 0.25]; [V,M] = var(A,w)
V = 1×3
6.1875 9.5000 6.1875
M = 1×3
2.7500 -1.0000 5.7500
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数组,指定为向量、矩阵、多维数组、表或时间表。如果 A
是标量,则 var(A)
返回 0
。如果 A
是一个 0
×0
的空数组,则 var(A)
返回 NaN
。
数据类型: single
| double
| table
| timetable
复数支持: 是
w
— 粗细
0
(默认) | 1
| 向量
权重,指定为以下值之一:
0
- 按N-1
实现归一化,其中N
是观测值的数量。如果只有一个观测值,则权重为 1。1
- 按N
实现归一化。由非负标量权重构成的向量,这些权重对应于沿其计算方差的
A
的维度。
数据类型: single
| double
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。
维度 dim
表示长度减至 1
的维度。size(V,dim)
为 1
,而所有其他维度的大小保持不变。
以一个 m
×n
输入矩阵 A
为例:
var(A,0,1)
计算A
的每列中元素的方差,并返回一个1
×n
行向量。var(A,0,2)
计算A
的每行中元素的方差,并返回一个m
×1
列向量。
如果 dim
大于 ndims(A)
,则 var(A)
返回大小与 A
相同的由零组成的数组。
vecdim
— 维度向量
正整数向量
维度向量,指定为正整数向量。每个元素代表输入数组的一个维度。指定的操作维度的输出长度为 1,而其他保持不变。
以 2×3×3 输入数组 A
为例。然后 var(A,0,[1 2])
返回 1×1×3 数组,其元素是在 A
的每页上计算的方差。
nanflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "omitmissing"
| "omitnan"
缺失值条件,指定为下列值之一:
"includemissing"
或"includenan"
- 在计算方差时包括A
中的NaN
值。如果运算维度中的任一元素是NaN
,则V
中的对应元素也是NaN
。"includemissing"
和"includenan"
具有相同的行为。"omitmissing"
或"omitnan"
- 忽略A
和w
中的NaN
值,并基于较少的点计算方差。如果运算维度中的所有元素都是NaN
,则V
中的对应元素是NaN
。"omitmissing"
和"omitnan"
具有相同的行为。
输出参量
V
— 方差
标量 | 向量 | 矩阵 | 多维数组 | 表
方差,以标量、向量、矩阵、多维数组或表形式返回。
如果
A
是观测值的向量,则V
是标量。如果
A
是一个列为随机变量且行为观测值的矩阵,则V
是一个包含与每列对应的方差的行向量。如果
A
是多维数组,则var(A)
沿大小大于 1 的第一个数组维度计算,并将这些元素视为向量。此维度中V
的大小变为1
,而所有其他维度的大小仍与在A
中相同。如果
A
是标量,则V
为0
。如果
A
是一个0
×0
的空数组,则V
为NaN
。如果
A
是表或时间表,则V
是单行表。如果A
的变量有单位,则V
的变量没有那些单位。 (自 R2023a 起)
M
— 均值
标量 | 向量 | 矩阵 | 多维数组 | 表
均值,以标量、向量、矩阵、多维数组或表形式返回。
如果
A
是观测值的向量,则M
是标量。如果
A
是一个列为随机变量且行为观测值的矩阵,则M
是一个包含与每列对应的均值的行向量。如果
A
是多维数组,则var(A)
沿大小大于 1 的第一个数组维度计算,并将这些元素视为向量。此维度中M
的大小变为1
,而所有其他维度的大小仍与在A
中相同。如果
A
是标量,则M
等于A
。如果
A
是一个0
×0
的空数组,则M
为NaN
。如果
A
是表或时间表,则M
是单行表。如果A
的变量有单位,则M
的变量有相同的单位。 (自 R2023a 起)
如果 V
是加权方差,则 M
是加权均值。
详细信息
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
C++ 代码生成支持以下语法:
V = var(A)
V = var(A,w)
V = var(A,w,"all")
V = var(A,w,dim)
V = var(A,w,vecdim)
V = var(__,nanflag)
指定时,维度必须为常量。
请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
如果指定
dim
,则它必须为常量。GPU 代码生成支持以下语法:
V = var(A)
V = var(A,w)
V = var(A,w,"all")
V = var(A,w,dim)
V = var(A,w,vecdim)
V = var(__,nanflag)
基于线程的环境
使用 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: 直接对表和时间表执行计算
var
函数可以对表或时间表中的所有变量执行计算,而无需通过索引访问这些变量。所有变量都必须具有支持计算的数据类型。有关详细信息,请参阅Direct Calculations on Tables and Timetables。
R2023a: 指定缺失值条件
使用 "includemissing"
或 "omitmissing"
选项计算方差时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
R2023a: 改进了处理小型组时的性能
在未指定运算维度的情况下对实数向量执行计算时,var
函数的性能得到了改进。与在 R2022b 中相比,在 R2023a 中函数能够更快地确定默认运算维度。
例如,以下代码会计算沿默认向量维度的方差。代码执行速度比上一版本大约快 1.6 倍。
function timingVar A = rand(10,1); for i = 1:8e5 var(A); end end
大致的执行时间是:
R2022b:1.29 秒
R2023a:0.79 秒
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上使用 timeit
函数进行计时的。
timeit(@timingVar)
R2022a: 返回均值或加权均值
现在,var
函数可以通过使用第二个输出参量 M
返回用于计算方差的输入元素的均值。如果指定了加权方案,则 var
返回加权均值。
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)