PyTorch学习笔记之基础函数篇(九)

统计运算

5.1 torch.mean()函数

torch.mean() 是 PyTorch 中的一个函数,用于计算张量(Tensor)的平均值。你可以用它来计算一个张量所有元素的平均值,或者指定某个维度上的平均值。

torch.mean() 函数在 PyTorch 中的签名如下:

torch.mean(input, dim=None, keepdim=False, dtype=None) → Tensor

参数解释:

  • input (Tensor): 要计算平均值的输入张量。
  • dim (int, optional): 要计算平均值的维度。如果未指定,则计算所有元素的平均值并返回一个标量。
  • keepdim (bool, optional): 是否保持维度。如果设置为 True,则结果张量将具有与输入张量相同的维度,除了被规约的维度外,其他维度的大小为 1。默认为 False。
  • dtype (torch.dtype, optional): 返回张量的数据类型。如果未指定,则使用输入张量的数据类型。

返回值:

  • Tensor: 计算平均值后的张量。如果 dim 未指定,则返回一个标量。

基本用法

计算张量中所有元素的平均值:

import torch

x = torch.tensor([1.0, 2.0, 3.0])
mean = torch.mean(x)
print(mean)  # 输出:2.0

指定维度

你可以通过 dim 参数来指定在哪个维度上计算平均值。例如,对于一个二维张量(通常可以看作是一个矩阵),你可以计算每一列或每一行的平均值。

x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 计算每一列的平均值
col_mean = torch.mean(x, dim=0)
print(col_mean)  # 输出:tensor([2.5000, 3.5000, 4.5000])

# 计算每一行的平均值
row_mean = torch.mean(x, dim=1)
print(row_mean)  # 输出:tensor([2., 5.])

保持维度

默认情况下,torch.mean() 函数会返回一个一维张量作为结果。如果你希望结果保持原始张量的维度,可以使用 keepdim 参数:

x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 计算每一列的平均值,并保持维度
col_mean_keepdim = torch.mean(x, dim=0, keepdim=True)
print(col_mean_keepdim)  # 输出:tensor([[2.5000, 3.5000, 4.5000]])

注意事项

如果张量包含非数值类型(如字符串或布尔值),torch.mean() 会抛出错误。
当指定了 dim 参数时,返回的张量的大小将在指定的维度上减少一个维度。
torch.mean() 默认会计算所有元素的平均值,不包括任何可能的 NaN 或 inf 值。

这个函数在数据预处理、统计分析以及神经网络训练过程中计算损失等场景中非常有用。

5.2 torch.median()函数

torch.median() 是 PyTorch 中的一个函数,用于计算张量(Tensor)的中位数。和 torch.mean() 类似,torch.median() 也支持指定维度来计算中位数。

torch.median() 函数在 PyTorch 中的签名如下:

torch.median(input, dim=None, keepdim=False)(Tensor, LongTensor)

参数解释:

  • input (Tensor): 输入张量,其中包含了需要计算中位数的数据。
  • dim (int, optional): 沿着哪个维度计算中位数。如果不指定,则在整个张量上计算并返回一个标量。默认为 None。
  • keepdim (bool, optional): 是否保持维度。如果设置为 True,则输出张量将具有与输入张量相同的维度,除了被规约的维度外,其他维度的大小为 1。默认为 False。

返回值:

  • (Tensor, LongTensor): 一个包含两个张量的元组。第一个张量是中位数,第二个张量是中位数的索引。

下面是一个使用 torch.median() 函数的例子:

import torch

# 创建一个一维张量
x = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])

# 计算整个张量的中位数
median_value, median_indices = torch.median(x)
print(median_value)  # 输出:3.0
print(median_indices)  # 输出:tensor(2)

# 创建一个二维张量
x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 计算每一列的中位数
medians_column, indices_column = torch.median(x, dim=0)
print(medians_column)  # 输出:tensor([2.5000, 3.5000, 4.5000])
print(indices_column)  # 输出:tensor([0, 0, 0])

# 计算每一行的中位数
medians_row, indices_row = torch.median(x, dim=1, keepdim=True)
print(medians_row)  # 输出:tensor([[2.],
                    #               [5.]])
print(indices_row)  # 输出:tensor([[1],
                    #               [1]])

基本用法

计算张量中所有元素的中位数:

import torch

x = torch.tensor([1.0, 2.0, 3.0, 4.0])
median = torch.median(x)
print(median)  # 输出:2.5

如果张量中有偶数个元素,torch.median() 会返回中间两个数的平均值作为中位数。

指定维度

你可以通过 dim 参数来指定在哪个维度上计算中位数。例如,对于一个二维张量,你可以计算每一列或每一行的中位数。

x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 计算每一列的中位数
col_median = torch.median(x, dim=0)
print(col_median)  # 输出:tensor([2.5000, 3.5000, 4.5000])

# 计算每一行的中位数
row_median = torch.median(x, dim=1)
print(row_median)  # 输出:tensor([2., 5.])

保持维度

和 torch.mean() 一样,torch.median() 也支持 keepdim 参数来保持结果的维度:

x = torch.tensor([[1.0, 2.0, 3.0],
                  [4.0, 5.0, 6.0]])

# 计算每一列的中位数,并保持维度
col_median_keepdim = torch.median(x, dim=0, keepdim=True)
print(col_median_keepdim)  # 输出:tensor([[2.5000],
                           #               [3.5000],
                           #               [4.5000]])

返回值

torch.median() 返回两个张量:中位数和对应的中位数索引。如果你只需要中位数,可以忽略索引。

median_value, median_indices = torch.median(x, dim=0)
print(median_value)  # 输出:tensor([2.5000, 3.5000, 4.5000])
print(median_indices)  # 输出:tensor([0, 0, 0])

在这个例子中,median_indices 是每一列中位数的索引,因为所有列的中位数都是第一个元素(索引为0)。
注意事项

torch.median() 不支持直接处理非数值类型(如字符串或布尔值)的张量。
如果张量中包含 NaN 或 inf 值,torch.median() 的行为可能会受到这些值的影响,具体取决于你的 PyTorch 版本和配置。

这个函数在数据分析、信号处理以及机器学习中处理分布不均匀的数据时非常有用。

5.3 torch.sum()函数

torch.sum() 是 PyTorch 中的一个函数,用于计算张量(tensor)中元素的和。它可以沿着指定的维度进行求和,也可以计算所有元素的和。

torch.sum() 函数的签名在 PyTorch 中是这样的:

torch.sum(input, dim=None, dtype=None, keepdim=False)

参数说明:

  • input (Tensor): 需要计算和的输入张量。
  • dim (int, optional): 要沿着哪个维度进行求和。如果为 None,则计算所有元素的和。
  • dtype (torch.dtype, optional): 返回张量的所需数据类型。如果指定,则输入张量会被转换为该数据类型后再求和。
  • keepdim (bool, optional): 如果为 True,则输出张量保持与输入张量相同的维度数,但在求和的维度上大小为 1。如果为 False,则输出张量减少一个维度。

返回值:

  • Tensor: 一个新的张量,其元素是 input 张量按照指定维度求和的结果。

下面是一个使用 torch.sum() 函数签名的简单例子:

import torch

# 创建一个二维张量
x = torch.tensor([[1, 2], [3, 4]])

# 计算张量中所有元素的和
total_sum = torch.sum(x)
print(total_sum)  # 输出:10

# 计算每一列的和
col_sums = torch.sum(x, dim=0)
print(col_sums)  # 输出:tensor([4, 6])

# 计算每一行的和
row_sums = torch.sum(x, dim=1)
print(row_sums)  # 输出:tensor([3, 7])

# 指定数据类型和保持维度
sum_with_dtype_keepdim = torch.sum(x, dim=1, dtype=torch.float64, keepdim=True)
print(sum_with_dtype_keepdim)  # 输出:tensor([[3.], [7.]], dtype=torch.float64)

在这个例子中,torch.sum() 被用来计算张量 x 中所有元素的和(dim=None),每一列的和(dim=0),以及每一行的和(dim=1)。通过指定 dtype 参数,可以控制输出张量的数据类型。通过指定 keepdim 参数,可以控制输出张量的维度是否保持不变。

5.4 torch.prod()函数

torch.prod() 是 PyTorch 中的一个函数,用于计算张量中所有元素的乘积12。

当我们将一个张量传递给 torch.prod() 时,它会返回该张量中所有元素的乘积。如果输入张量中有多个维度,我们可以指定 dim 参数来计算特定维度上元素的乘积。

基本用法:

import torch

# 创建一个张量
x = torch.tensor([[1, 2], [3, 4]])

# 计算张量中所有元素的乘积
prod_all = torch.prod(x)
print(prod_all)  # 输出:24

参数:

  • input (Tensor):需要计算乘积的输入张量。
  • dim (int, optional):要沿着哪个维度计算乘积。如果不指定,则默认计算所有元素的乘积。
  • keepdim (bool, optional):如果设置为 True,则输出的张量将保持与输入张量相同的维度数,但在计算的维度上大小为1。如果为 False,则输出的张量将减少一个维度。

例子:

x = torch.tensor([[1, 2], [3, 4]])

# 沿着第一个维度(行)计算乘积
prod_dim0 = torch.prod(x, dim=0)
print(prod_dim0)  # 输出:tensor([3, 8])

# 沿着第二个维度(列)计算乘积
prod_dim1 = torch.prod(x, dim=1)
print(prod_dim1)  # 输出:tensor([2, 12])

# 指定 keepdim=True
prod_dim1_keepdim = torch.prod(x, dim=1, keepdim=True)
print(prod_dim1_keepdim)  # 输出:tensor([[2], [12]])

torch.prod() 在处理多维数据时非常有用,特别是当你需要沿着特定维度聚合数据时。

5.5 torch.std()函数

torch.std() 是 PyTorch 中的一个函数,用于计算张量(tensor)中元素的标准差。这个函数可以沿着指定的维度计算标准差,也可以计算整个张量中所有元素的标准差。
函数签名

torch.std(input, dim=None, unbiased=True, keepdim=False)

参数

  • input (Tensor): 需要计算标准差的输入张量。
  • dim (int, optional): 要沿着哪个维度计算标准差。如果 dim 是 None,则计算整个张量中所有元素的标准差。
  • unbiased (bool, optional): 是否使用无偏估计来计算标准差。默认为 True。如果是 False,则使用有偏估计(即除以 n - 1 而不是 n)。
  • keepdim (bool, optional): 如果为 True,则输出张量保持与输入张量相同的维度数,但在计算标准差的维度上大小为 1。如果为 False,则输出张量的维度将减少一个维度(即去掉计算标准差的维度)。

返回值

  • Tensor: 一个新的张量,其元素是输入张量 input 按照指定维度 dim 计算的标准差。

例子

import torch

# 创建一个二维张量
x = torch.tensor([[1, 2], [3, 4]])

# 计算整个张量中所有元素的标准差
overall_std = torch.std(x)
print(overall_std)  # 输出: tensor(1.2909944)

# 计算每一列的标准差
col_stds = torch.std(x, dim=0)
print(col_stds)  # 输出: tensor([1., 1.])

# 计算每一行的标准差
row_stds = torch.std(x, dim=1)
print(row_stds)  # 输出: tensor([1., 1.])

# 使用有偏估计计算标准差
biased_std = torch.std(x, unbiased=False)
print(biased_std)  # 输出: tensor(1.1180339)

# 保持维度计算标准差
std_keepdim = torch.std(x, dim=1, keepdim=True)
print(std_keepdim)  # 输出: tensor([[1.], [1.]])

在这个例子中,torch.std() 被用来计算二维张量 x 中所有元素的标准差(dim=None),每一列的标准差(dim=0),以及每一行的标准差(dim=1)。通过设置 unbiased 参数,可以选择使用无偏或有偏的标准差估计。通过设置 keepdim 参数,可以控制输出张量的维度是否保持不变。

5.6 torch.var()函数

torch.var() 是 PyTorch 中的一个函数,用于计算张量(tensor)中元素的方差。这个函数可以沿着指定的维度计算方差,也可以计算整个张量中所有元素的方差。

函数签名

torch.var(input, dim=None, unbiased=True, keepdim=False)

参数:

  • input (Tensor): 需要计算方差的输入张量。
  • dim (int, optional): 要沿着哪个维度计算方差。如果 dim 是 None,则计算整个张量中所有元素的方差。
  • unbiased (bool, optional): 是否使用无偏估计来计算方差。默认为 True。如果是 False,则使用有偏估计(即除以 n 而不是 n - 1)。
  • keepdim (bool, optional): 如果为 True,则输出张量保持与输入张量相同的维度数,但在计算方差的维度上大小为 1。如果为 False,则输出张量的维度将减少一个维度(即去掉计算方差的维度)。

返回值

Tensor: 一个新的张量,其元素是输入张量 input 按照指定维度 dim 计算的方差。

例子

import torch

# 创建一个二维张量
x = torch.tensor([[1, 2], [3, 4]])

# 计算整个张量中所有元素的方差
overall_var = torch.var(x)
print(overall_var)  # 输出: tensor(1.25)

# 计算每一列的方差
col_vars = torch.var(x, dim=0)
print(col_vars)  # 输出: tensor([1., 1.])

# 计算每一行的方差
row_vars = torch.var(x, dim=1)
print(row_vars)  # 输出: tensor([0., 0.])

# 使用有偏估计计算方差
biased_var = torch.var(x, unbiased=False)
print(biased_var)  # 输出: tensor(1.1111111)

# 保持维度计算方差
var_keepdim = torch.var(x, dim=1, keepdim=True)
print(var_keepdim)  # 输出: tensor([[0.], [0.]])

在这个例子中,torch.var() 被用来计算二维张量 x 中所有元素的方差(dim=None),每一列的方差(dim=0),以及每一行的方差(dim=1)。通过设置 unbiased 参数,可以选择使用无偏或有偏的方差估计。通过设置 keepdim 参数,可以控制输出张量的维度是否保持不变。

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Pytorch是机器学习中的一个重要框架,它与TensorFlow一起被认为是机器学习的两大框架。Pytorch学习可以从以下几个方面入手: 1. Pytorch基本语法:了解Pytorch的基本语法和操作,包括张量(Tensors)的创建、导入torch库、基本运算等\[2\]。 2. Pytorch中的autograd:了解autograd的概念和使用方法,它是Pytorch中用于自动计算梯度的工具,可以方便地进行反向传播\[2\]。 3. 使用Pytorch构建一个神经网络:学习使用torch.nn库构建神经网络的典型流程,包括定义网络结构、损失函数、反向传播和更新网络参数等\[2\]。 4. 使用Pytorch构建一个分类器:了解如何使用Pytorch构建一个分类器,包括任务和数据介绍、训练分类器的步骤以及在GPU上进行训练等\[2\]。 5. Pytorch的安装:可以通过pip命令安装Pytorch,具体命令为"pip install torch torchvision torchaudio",这样就可以在Python环境中使用Pytorch了\[3\]。 以上是一些关于Pytorch学习笔记,希望对你有帮助。如果你需要更详细的学习资料,可以参考引用\[1\]中提到的网上帖子,或者查阅Pytorch官方文档。 #### 引用[.reference_title] - *1* [pytorch自学笔记](https://blog.csdn.net/qq_41597915/article/details/123415393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Pytorch学习笔记](https://blog.csdn.net/pizm123/article/details/126748381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫Devin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值