位置: 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)

  • 红米note11怎么录屏(红米note11怎么录音)

    红米note11怎么录屏(红米note11怎么录音)

  • 12306积分怎么获得呢(怎么获得12306积分)

    12306积分怎么获得呢(怎么获得12306积分)

  • vivo x27指纹解锁在哪(vivo x27指纹解锁换屏了怎么不能用了)

    vivo x27指纹解锁在哪(vivo x27指纹解锁换屏了怎么不能用了)

  • 华为nova5i来电图片怎么设置(华为nova5i来电图片)

    华为nova5i来电图片怎么设置(华为nova5i来电图片)

  • 纯图pdf和普通pdf区别(普通pdf与纯图pdf)

    纯图pdf和普通pdf区别(普通pdf与纯图pdf)

  • 微信读书每日一答点不开(微信读书每日一答必过方法)

    微信读书每日一答点不开(微信读书每日一答必过方法)

  • word怎么剪切图片的一部分(word怎么剪切图片快捷键)

    word怎么剪切图片的一部分(word怎么剪切图片快捷键)

  • 台式机无线网卡连不上(台式机无线网卡怎么安装)

    台式机无线网卡连不上(台式机无线网卡怎么安装)

  • 苹果授权店退换货政策(苹果授权店退换货流程)

    苹果授权店退换货政策(苹果授权店退换货流程)

  • 一个身份证可以申请几个微信号(一个身份证可以开几个淘宝店铺)

    一个身份证可以申请几个微信号(一个身份证可以开几个淘宝店铺)

  • win10重装系统能保留应用吗(win10重装系统能清除病毒吗)

    win10重装系统能保留应用吗(win10重装系统能清除病毒吗)

  • 淘宝预售款一直不发货怎么办(淘宝预售款一直在审核中)

    淘宝预售款一直不发货怎么办(淘宝预售款一直在审核中)

  • 分盘c盘分多大合适(分盘的时候c盘分多少为好)

    分盘c盘分多大合适(分盘的时候c盘分多少为好)

  • 中国5g频段有几个(我国5g频段有哪些)

    中国5g频段有几个(我国5g频段有哪些)

  • wps怎么画表格(wps怎么画表格斜线)

    wps怎么画表格(wps怎么画表格斜线)

  • 抖音忘记密码怎么登录(抖音忘记密码怎么找回账号)

    抖音忘记密码怎么登录(抖音忘记密码怎么找回账号)

  • 红米k20pro充满电自动断电吗(红米k20pro充满电要多久)

    红米k20pro充满电自动断电吗(红米k20pro充满电要多久)

  • 魅族16th开发者选项在哪里(魅族16th开发者选项设置)

    魅族16th开发者选项在哪里(魅族16th开发者选项设置)

  • 手机显示hd1收费吗(手机显示hd是什么意思收费吗?)

    手机显示hd1收费吗(手机显示hd是什么意思收费吗?)

  • micro b是什么接口(micro b接线图)

    micro b是什么接口(micro b接线图)

  • 华为p30pro红外传感器有什么用(华为p30pro 红外)

    华为p30pro红外传感器有什么用(华为p30pro 红外)

  • 苹果电脑文件夹在哪里(苹果电脑文件夹重命名)

    苹果电脑文件夹在哪里(苹果电脑文件夹重命名)

  • 监控系统关闭开启步骤(监控系统关闭后如何开启)

    监控系统关闭开启步骤(监控系统关闭后如何开启)

  • 美食菜谱app开发怎么盈利(美食做菜app)

    美食菜谱app开发怎么盈利(美食做菜app)

  • Mac App store出现未知错误怎么办?Mac市场错误解决(mac app store一直转圈圈)

    Mac App store出现未知错误怎么办?Mac市场错误解决(mac app store一直转圈圈)

  • 维多利亚瀑布上的彩虹,赞比亚 (© Dietmar Temps/Shutterstock)(维多利亚瀑布有多高?多宽?)

    维多利亚瀑布上的彩虹,赞比亚 (© Dietmar Temps/Shutterstock)(维多利亚瀑布有多高?多宽?)

  • vgdisplay命令  显示VG卷组信息(vgdisplay命令无效)

    vgdisplay命令 显示VG卷组信息(vgdisplay命令无效)

  • 全国增值税发票服务平台
  • 生产成本年末转入什么科目
  • 税率和征收率有什么不一样
  • 个人可以申请代收货款吗
  • 母公司合并子公司会计处理
  • 资本公积不足冲减是什么意思
  • 邯郸银行公对公转账时间
  • 次年度所得税预缴申报期限怎么执行?
  • 发票鉴定管理办法
  • 上市公司股票增持是什么回事
  • 确认主营业务成本的依据是什么单据
  • 应付账款多付了会计分录
  • 增值税发票清单怎么导出
  • 公司发生业务分录
  • 固定资产进项税额怎么抵扣
  • 营改增后房产税计税依据及计算方式
  • 单位有临时工工资怎么发
  • 工商年度报表怎么打印出来
  • 杜邦分析法的三个核心是什么
  • 进货价加多少卖不亏增值税
  • 这个月发票没用怎么做账
  • 外经证作废流程
  • 固定资产达到使用状态时发生的安装费用
  • 工程公司收到工程款
  • win10桌面窗口管理器gpu占用高
  • 成品油零售加油站增值税规定
  • 电脑数据恢复怎么用
  • 家庭版系统如何重装成专业版本
  • 安装adsl modem必须安装什么协议
  • 工程完工结转成本怎么算
  • 增值税专票开错了可以作废吗
  • mmc.exe是什么进程
  • php中meta
  • php新手入门教程
  • 2020年外贸企业年终总结
  • 特殊性税务处理的条件
  • php年月日时间代码
  • 如何修改php.ini
  • yii2框架结构
  • php文本统计访问量
  • phpize安装
  • pytorch1.9.0
  • php数组实现原理
  • 浅析中国式现代化的理论价值与现实意义
  • 数字图像处理总结
  • 预付工程款如何结算
  • 预算收入的核算
  • 预期信用损失率的确认依据和过程
  • 计提折旧会计分录怎么做
  • 金融企业有
  • 奖金做预发年底会发吗
  • 公司一年发两次奖金
  • 如何处理固定资产报废
  • 交租金没有发票怎么办
  • 建筑工程老项目开票截止日期
  • 增值税申报成功了忘了缴款
  • 企业进项构成比例
  • 车辆违章有几种处理方法
  • 随同产品销售不单独计价包装物如何进行账务处理?
  • 基本生产成本和生产成本
  • 二类银行卡是什么卡
  • mysql按时间查询
  • 数据库性能优化方法论和最佳实践
  • mysql中的ifnull函数
  • sql语句 时间差
  • win7系统最佳性能
  • 如何解决电脑蓝屏0X0000007B
  • sqlservr.exe - sqlservr是什么进程 有什么作用
  • windows8.1的设置在哪
  • win8 cmd在哪
  • win8.1中文版下载
  • cssimage
  • glslpe
  • Android Toast设置弹窗大小
  • javascript开发app教程
  • node.js的内置模块
  • javascript选项
  • jquery的实现原理
  • javascript怎么学
  • jquery里的each()是什么函数?你是如何使用他的?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设