介绍
PyTorch 中张量的 var() 方法,也就是如何计算 张量的 方差,我会从基础概念到实际用法一步步讲清楚。
方差的基本概念
语法
var(dim=None, unbiased=True, keepdim=False)
参数:
dim:指定计算方差的维度(不指定则计算整个张量的方差)unbiased:是否使用无偏估计(默认True,除以n-1;False则除以n)keepdim:是否保持结果的维度(默认False,会压缩计算维度)
细节解释
无偏 vs 有偏:
unbiased=True(默认):样本方差,公式为sum((x - mean)^2) / (n-1),适合 样本数据估计总体方差。unbiased=False:总体方差,公式为sum((x - mean)^2) / n,适合 计算全部数据的方差。
维度指定:
- 二维张量中,
dim=0是列维度,dim=1是行维度; - 高维张量可指定多个维度(如
dim=(0,1)),会同时对多个维度计算方差。
- 二维张量中,
数据类型:
var()会自动将整数张量转为 浮点型(方差结果通常是浮点数)。
例子
import torch
# 1. 基础示例:一维张量的方差
# 创建一维张量
x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
# 计算整体方差(无偏估计,除以 n-1)
var_unbiased = x.var()
print("无偏方差(除以 n-1):", var_unbiased) # 输出: tensor(2.5)
# 计算整体方差(有偏估计,除以 n)
var_biased = x.var(unbiased=False)
print("有偏方差(除以 n):", var_biased) # 输出: tensor(2.)
# 2. 二维张量的方差(指定维度)
# 创建 2x3 的二维张量
y = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
# 按行计算方差(dim=1,每行的方差)
var_dim1 = y.var(dim=1)
print("按行计算方差:", var_dim1) # 输出: tensor([1., 1.])
# 按列计算方差(dim=0,每列的方差),并保持维度
var_dim0_keepdim = y.var(dim=0, keepdim=True)
print("按列计算方差(保持维度):\n", var_dim0_keepdim)
# 输出: tensor([[2.2500, 2.2500, 2.2500]])
总结
var()是 PyTorch 计算张量方差的核心方法,默认计算样本方差(除以n-1),设置unbiased=False可计算总体方差;- 通过
dim参数可指定计算方差的维度,keepdim=True能保持结果维度与原张量一致; - 一维张量直接计算整体方差,高维张量需指定
dim来按行/列/其他维度计算。