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

文章目录

  • 统计运算
    • 5.1 torch.mean()函数
    • 5.2 torch.median()函数
    • 5.3 torch.sum()函数
    • 5.4 torch.prod()函数
    • 5.5 torch.std()函数
    • 5.6 torch.var()函数

统计运算

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 torchx = 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 torchx = 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 参数,可以控制输出张量的维度是否保持不变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探讨Python中的文件操作与文件IO操作【第141篇—Python实现】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 深入探讨Python中的文件操作与文件IO操作 在Python编程中,文件操作和文件IO操作…

ES集群和分片以及脑裂

文章目录 概要一、概念二、节点角色三、master节点脑裂四、参考 概要 在工作中不可避免会用到ES,而用到ES就不得使用其集群模式了。 单节点的话不得不面临两个重大缺陷:单点故障(高可用)和海量数据存储搜索。 ES通过集群模式解决…

数据库增删改查复习

增删改查 插入数据 #插入一行 insert into student values(xwz,男,18); #插入多行数据 insert into student values(xwz,男,18),(jesse,女,12); #插入行的一部分 insert into studnet(name,gender,age) values(xwz,男,18) #插入查询出来的数…

使用动态日志简化开发时间

1.游戏日志的重要性 日志,无论是对于开发环境,还是生产环境,都有着非常重要的作用,具体如下: 跟踪和记录应用程序的运行状态,以便进行故障排查和问题定位。提供应用程序的运行性能数据,以便优化和改进应用程序的性能。收集用户行为和反馈,以便进行用户行为分析和用户体…

JSR规范系列(6)——Jakarta EE 9 规范

Jakarta EE 9 规范 Jakarta EE 9 规范 JSR规范系列(1)——Java版本、JSR规范和JCP社区流程概述 JSR规范系列(2)——JavaSE规范、JavaEE规范、JSR规范全面整理——截止201908 JSR规范系列(3)——Java EE 6规…

Pots

给你两个容量分别为 A 升和 B 升的罐子。可以进行以下操作: FILL(i) 从水龙头向罐子 i(1 ≤ i ≤ 2)灌满水;DROP(i) 把罐子 i 的水倒空;POUR(i,j) 从罐子 i 向罐子 j 倒水;此操作后&#x…

● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇

● 647. 回文子串 1.dp数组含义。 之前的题目,差不多都是求什么就怎么定义dp数组,最后返回dp的最后一个元素。但是这里如果定义一维数组dp[i]是[0,i]范围的回文子串的个数的话,怎么根据dp[i-1]得到dp[i]?发现很难找到递归关系…

Linux之gcc_makefile

一、提要 1. 预处理(进行宏替换) 2. 编译(生成汇编) 3. 汇编(生成机器可识别代码) 4. 链接(生成可执行文件或库文件) 五六十年代,我们编程大多是二进制编程,也就是使用打孔纸带喂给机器 再往后&…

118.Qt入门,实现一个图片查看软件

需要用到的控件 QLabelQLineEditQPushButton 需要实现的功能 打开目录选择图片显示图片的名字显示图片 QLabel基本用法 void setText(const QString &);//设置文本QString text() const;//获取文本void setPixmap(const QPixmap &);设置大小 使用父类QWidget的方法设置…

窗口函数(sample database classicmodels _No.8 )

窗口函数(sample database classicmodels _No.8 ) 准备工作,可以去下载 classicmodels 数据库具体如下 点击:classicmodels 也可以去 下面我的博客资源下载 https://download.csdn.net/download/tomxjc/88685970 文章目录 窗口函…

什么品牌洗地机清洁效果最好?洗地机品牌十大排名:前四名口碑公认

有使用过洗地机的朋友,相信对此都深有感触,洗地机的一洗一吸,清洁效果非常棒,地面的污渍、垃圾、粉尘都坚持不了几秒钟,分分钟可以让家里地面焕然一新,简直不要太香。但是,洗地机那么多&#xf…

Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码

此章节相对较难理解,有时间单独出一章讲一下 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili InventoryItem.cs…

FMQL45 XADC

通过PL自带的XADC可以读写温度,电压等,但是总是读的不对。开始查找FM_QL_bsp里面少了一个部分就是pl!添加,在ewp已经修改了,但是文件不存在,现在给补上了,有点奇怪,有的项目会自动生…

网络安全-护网行动1

1.什么事hvv行动 2021年攻击队伍 100队伍,不设定攻击路径,在不违法和不破坏防守单位的前提下可以使用任何工具,如社会工程、钓鱼等 攻击方: 又公安部提供统一的攻击平台,场景、规则 防守方:也有自己的平台…

Python入门(小白友好)

知识图谱 搭建环境 安装Python:Download Python | Python.org 安装PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains 注意:专业版本是收费的,新手小白使用社区版(community)即可 创建第一个项目: 一些PyCharm的设置(也适用…

Linux之线程同步

目录 一、问题引入 二、实现线程同步的方案——条件变量 1、常用接口&#xff1a; 2、使用示例 一、问题引入 我们再次看看上次讲到的多线程抢票的代码&#xff1a;这次我们让一个线程抢完票之后不去做任何事。 #include <iostream> #include <unistd.h> #inc…

Java项目打包成Docker镜像

将项目打包成Docker镜像 将项目打包成Docker镜像的原因是可以在一台电脑的环境下模拟多台不同性能电脑响应高并发请求时候的表现。这里我们模拟半个CPU、一个CPU还有两个CPU的情况 在pom.xml文件中添加jib插件&#xff08;前提电脑安装了maven和Java 的 JDK才能成功完成编译&…

【Python操作基础】——变量操作

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

OLLVM环境配置

虚拟机配置: 4g 40g 增加源 deb [archamd64] http://archive.ubuntu.com/ubuntu focal main universe安装cmake sudo apt-get install cmake -y安装gcc8 sudo apt-get install gcc-8 g-8 -y切换为默认版本 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/…

30.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据搜索功能

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;29.数据推测功能…