pytorch api文档:张量的 var()方法-计算张量的方差

介绍

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]])

总结

  1. var() 是 PyTorch 计算张量方差的核心方法,默认计算样本方差(除以 n-1),设置 unbiased=False 可计算总体方差;
  2. 通过 dim 参数可指定计算方差的维度,keepdim=True 能保持结果维度与原张量一致;
  3. 一维张量直接计算整体方差,高维张量需指定 dim 来按行/列/其他维度计算。

原文出处:/show_1GW2e5wg9yvA.html