位置: IT常识 - 正文

torch.where()用法(torch.save用法)

编辑:rootadmin
torch.where()用法 torch.where用法前言1、torch.where()常规用法1.1 形状相同1.2 标量情况1.3 形状不同2、torch.where()特殊用法总结参考链接前言

推荐整理分享torch.where()用法(torch.save用法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:torch.sort用法,torch.save用法,torch.cat用法,torch.save用法,torch where,torch.where()函数,torch where,torch的用法,内容如对您有帮助,希望把文章链接给更多的朋友!

本文主要讲述torch.where()的两种用法,第一种是最常规的,也是官方文档所注明的;第二种就是配合bool型张量的计算

1、torch.where()常规用法

我们先看官方文档的解释:

torch.where(condition, x, y) 根据条件,也就是condiction,返回从x或y中选择的元素的张量(这里会创建一个新的张量,新张量的元素就是从x或y中选的,形状要符合x和y的广播条件)。 Parameters解释如下: 1、condition (bool型张量) :当condition为真,返回x的值,否则返回y的值 2、x (张量或标量):当condition=True时选x的值 2、y (张量或标量):当condition=False时选y的值

我看了好些博文,他们都说x和y的形状必须相同,完全胡扯嘛,官方文档写的明明白白的:The tensors condition, x, y must be broadcastable. 也就是说condition、x、y能进行广播就行,并不要求形状一样。下面看用法:

1.1 形状相同

先演示形状相同的情况:

import torchx = torch.tensor([[1, 2, 3], [3, 4, 5], [5, 6, 7]])y = torch.tensor([[5, 6, 7], [7, 8, 9], [9, 10, 11]])z = torch.where(x > 5, x, y)print(f'x = {x}')print(f'=========================')print(f'y = {y}')print(f'=========================')print(f'x > 5 = {x > 5}')print(f'=========================')print(f'z = {z}')>print result:x = tensor([[1, 2, 3], [3, 4, 5], [5, 6, 7]])=========================y = tensor([[ 5, 6, 7], [ 7, 8, 9], [ 9, 10, 11]])=========================x > 5 = tensor([[False, False, False], [False, False, False], [False, True, True]])=========================z = tensor([[5, 6, 7], [7, 8, 9], [9, 6, 7]])torch.where()用法(torch.save用法)

上面定义了x和y,两者的形状shape=(3, 3)相同,然后condition = x > 5也是就x中的每个元素值都要大于5,这里就能看到x中第0行和第1行都是False,只有第2行的1、2列是True,然后前面说了,为True时使用的是x中的值,为False时使用的是y中的值,那么新创建的z前两行和第2行0列使用的是y中的值,剩下两个使用x中的值,z的shape也是(3, 3)。

1.2 标量情况x = 3y = torch.tensor([[1, 5, 7]])z = torch.where(y > 2, y, x)print(f'y > 2 = {y > 2}')print(f'=========================')print(f'z = {z}')print(f'y > 2 = {y > 2}')print(f'=========================')print(f'z = {z}')>print result:y > 2 = tensor([[False, True, True]])=========================z = tensor([[3, 5, 7]])

在这里,x是一个标量,condition = y > 2,你要是问我为什么不把condition设为condition = x > 2,很简单,x > 2不是bool Tensor。这里标量和张量是可以进行广播的!! example:

a = torch.tensor([1, 5, 7])b = 3c = a + bd = torch.tensor([3, 3, 3])e = a + dprint(f'c = {c}')print(f'e = {e}')>print result:c = tensor([ 4, 8, 10])d = tensor([ 4, 8, 10])

其实就是把b = 3拉成了[3, 3, 3],也是就d那样。

1.3 形状不同

其实标量那里也算是形状不同了,这里我再啰嗦一下吧,看例子:

x = torch.tensor([[1, 3, 5]])y = torch.tensor([[2], [4], [6]])z = torch.where(x > 2, x, y)print(f'x = {x}')print(f'=========================')print(f'y = {y}')print(f'=========================')print(f'x > 2 = {x > 2}')print(f'=========================')print(f'z = {z}')>print result:x = tensor([[1, 3, 5]])=========================y = tensor([[2], [4], [6]])=========================x > 2 = tensor([[False, True, True]])=========================z = tensor([[2, 3, 5], [4, 3, 5], [6, 3, 5]])

上面x.shape=(1, 3) y.shape=(3, 1),然后condition = x > 2的shape=(1, 3),是可广播的,所以运算也能成功,在计算torch.where(x > 2, x, y)时,分别对x、y、condition进行广播,x.shape=(3, 3),y.shape=(3, 3),condition.shape=(3, 3) 所以y的值替换第0列,第1、2列为x的值。 更多的广播形式请读者朋友自行尝试

2、torch.where()特殊用法

torch.where(a & b) a和b都是bool Tensor,返回的是一个元组,元组第一项是a、b中都为True的行的index的Tensor,第二项是a、b都为True列的index的Tensor

请看例子:

a = torch.tensor([[0, 1, 1], [1, 0, 0], [0, 0, 1]], dtype=torch.bool)b = torch.ones((3, 3), dtype=torch.bool)c = torch.where(a & b)print(f'a = {a}')print(f'=========================')print(f'b = {b}')print(f'=========================')print(f'c = {c}')>print result:a = tensor([[False, True, True], [ True, False, False], [False, False, True]])=========================b = tensor([[True, True, True], [True, True, True], [True, True, True]])=========================c = (tensor([0, 0, 1, 2]), tensor([1, 2, 0, 2]))

c就是一个元组,第0项是a、b都为True的行标,第1项是a、b都为True的列标

总结

以上就是torch.where()的两种用法,看起来比较麻烦,多练练也就是那样,特别一点的就是一个广播机制一个特殊用法,欢迎评论指正! 请尊重原创,拒绝转载!!!

参考链接

https://pytorch.org/docs/stable/generated/torch.where.html#torch.where https://pytorch.org/docs/stable/notes/broadcasting.html#broadcasting-semantics https://numpy.org/doc/stable/user/basics.broadcasting.html

本文链接地址:https://www.jiuchutong.com/zhishi/289743.html 转载请保留说明!

上一篇:斯诺多尼亚国家公园多尔威泽兰城堡,英国威尔士康威 (© Sebastian Wasek/Sime/eStock Photo)(斯诺多尼亚山)

下一篇:雪花 (© TothGaborGyula/Getty Images Plus)

  • 网站降权的最新恢复的方法(网站降权怎么办)

    网站降权的最新恢复的方法(网站降权怎么办)

  • 巧妙优化网站博客 让网站推广事半功倍(优化网站的技巧)

    巧妙优化网站博客 让网站推广事半功倍(优化网站的技巧)

  • 苹果手机怎么调长焦(苹果手机怎么调时间设置)

    苹果手机怎么调长焦(苹果手机怎么调时间设置)

  • 硬盘温度多少算正常(硬盘温度多少算高)

    硬盘温度多少算正常(硬盘温度多少算高)

  • 腾讯视频下载的视频怎么保存到相册(腾讯视频下载的视频怎么保存到u盘)

    腾讯视频下载的视频怎么保存到相册(腾讯视频下载的视频怎么保存到u盘)

  • 手机wifi图标点不亮(手机wifi图标点了没反应)

    手机wifi图标点不亮(手机wifi图标点了没反应)

  • 华为nova5怎么截屏(华为nova5怎么截长图教程)

    华为nova5怎么截屏(华为nova5怎么截长图教程)

  • 连接蓝牙要网络吗么(连接蓝牙网络卡)

    连接蓝牙要网络吗么(连接蓝牙网络卡)

  • 手机qq语音气泡怎么恢复默认(手机qq语音气泡怎么设置方法)

    手机qq语音气泡怎么恢复默认(手机qq语音气泡怎么设置方法)

  • txt文档是什么意思

    txt文档是什么意思

  • pot一alooa是华为什么型号(POT一ALOOa是华为什么型号)

    pot一alooa是华为什么型号(POT一ALOOa是华为什么型号)

  • 智慧团建密码忘记而且找不到管理员怎么办(智慧团建密码忘了,但是又找不到管理员)

    智慧团建密码忘记而且找不到管理员怎么办(智慧团建密码忘了,但是又找不到管理员)

  • 百度贴吧可以改用户名吗(百度贴吧可以改密码吗)

    百度贴吧可以改用户名吗(百度贴吧可以改密码吗)

  • 手机开启免打扰模式有什么效果(手机开启免打扰功能有什么用)

    手机开启免打扰模式有什么效果(手机开启免打扰功能有什么用)

  • 华为mate30怎么调音量键(华为mate30怎么调usb)

    华为mate30怎么调音量键(华为mate30怎么调usb)

  • 省钱月卡怎么取消自动续费(省钱月卡怎么取消自动续费美团)

    省钱月卡怎么取消自动续费(省钱月卡怎么取消自动续费美团)

  • 苹果x滚动截屏怎么用(苹果滚动截屏怎么弄的)

    苹果x滚动截屏怎么用(苹果滚动截屏怎么弄的)

  • iphone11pro是双卡吗(iphone11pro是双卡双待手机吗)

    iphone11pro是双卡吗(iphone11pro是双卡双待手机吗)

  • 华为手机p30pro一键锁屏在哪里设置(华为手机p30Pro一直喊红包来了怎么关闭)

    华为手机p30pro一键锁屏在哪里设置(华为手机p30Pro一直喊红包来了怎么关闭)

  • max尺寸(12promax尺寸)

    max尺寸(12promax尺寸)

  • 如何查找手机nfc功能(如何查找手机定位)

    如何查找手机nfc功能(如何查找手机定位)

  • 手机空白怎么打(手机空白怎么打出来怎么办)

    手机空白怎么打(手机空白怎么打出来怎么办)

  • 华为p30如何设置铃声(华为p30如何设置24小时制)

    华为p30如何设置铃声(华为p30如何设置24小时制)

  •  斗鱼tv怎样屏蔽礼物(斗鱼tv怎样屏蔽频道)

    斗鱼tv怎样屏蔽礼物(斗鱼tv怎样屏蔽频道)

  • 分公司所得税汇算清缴
  • 存货跌价准备的分录
  • 土地增值税清算方法与技巧
  • 原始凭证太多如何删除
  • 所得税多交退税分录
  • 企业的固定资产有何特征
  • 认证发票密文有误不能抵扣如何处理?
  • 现金折扣冲减销售收入冲销项税吗
  • 其他综合收益转入留存收益还是投资收益
  • 有限合伙企业分红避税
  • 收到一笔误缴的税款
  • 外聘人员需要扣个人所得税吗
  • 小规模纳税人增值税账务处理
  • 关于个人所得税纳税人的说法正确的有
  • 公司修理电脑属于什么费用
  • 城建税教育费附加和地方教育费附加
  • 合伙企业分红是免税企业需要缴纳什么税
  • 现金日记账有哪几种
  • linux 将一个文件的内容给另一个文件
  • 向非绑定账户转账超限是什么意思
  • 预付账款主要是
  • PHP:mb_strtoupper()的用法_mbstring函数
  • deepin下载教程
  • win10待机界面进不去系统怎么办
  • macos big sur最新版本
  • w11系统安卓
  • jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例)
  • php对象缓存
  • 如何使用wireshark抓取HTTP数据包?
  • 柬埔寨 吴哥窟
  • 财政专户资金是专项资金吗
  • vue实现瀑布流布局
  • 计提投资者利润
  • node.js环境搭建
  • 补缴当年增值税税款和滞纳金如何记账
  • 暂估金额与发票金额会影响什么信息
  • diffusion扩散模型训练时间
  • php如何入门
  • 逆回购要手续费吗
  • 成本分配明细表
  • 基本户转到法人账户会计分录
  • 王凤林阴盘奇门实例讲解
  • 福利费用使用范围
  • 金蝶k3费用发票怎么生成凭证
  • 综合所得申报怎么补报上个月的
  • 收到现金货款怎么处理
  • 企业劳务费用如何记账
  • 个税手续费返还政策文件
  • 物业安装摄像头的规定
  • 退回上年度企业所得税
  • 利润总额和未分成比例
  • 个人独资企业交什么税
  • 剩余股利政策发放股利后的年末未分配利润
  • win10周年更新版是什么意思
  • linux获取主目录的命令
  • windows8怎么设置
  • win7暗藏的超实用快捷键汇总
  • windows8如何添加打印机
  • win7的打开方式在哪里
  • win7系统电脑硬盘图标变了,控制面板也打不开
  • win10正版和盗版区别大吗
  • win7登录账号
  • rd命令是什么
  • firefox下rowspan+border+border-collapse的bug
  • Perl的Mail::POP3Client模块和Gmail通信实例
  • perl执行shell命令
  • js 对象声明
  • shell字符串操作命令
  • unity ulua
  • beautiful python
  • 基于unity3d
  • javascript数据类型有哪些
  • python中对文件操作的一般步骤
  • 浙江普通发票查验
  • 公司税务认证
  • 国税局政审审考生什么
  • 郝姓家谱辈分查询
  • 税务局发票邮寄费用谁承担
  • 分类编码方案可以在什么中修改
  • 应缴纳资源税税额怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设