pytorch每日一学38(torch.nonzero())取出指定tensor指定条件下的元素的索引(位置)

第38个方法

torch.nonzero(input, *, out=None, as_tuple=False) → LongTensor or tuple of LongTensors
  • 此方法的作用是将我们的input中非零元素的索引返回,也可以返回满足指定条件下的元素所以。

接下来看参数:

  • input:需要进行返回索引的tensor。
  • out:指定输出
  • as_tuple(bool):此参数有两个取值,True和False,默认为False。
    • 值为False时返回一个二维张量,其中每一行都是一个非零值的索引。
    • 值为True时返回一维索引张量的元组,允许进行高级索引,因此x [x.nonzero(as_tuple = True)]给出张量x的所有非零值。在返回的元组中,每个索引张量都包含特定维度的非零索引。其实就是返回很多个元组,每一个元组都是值为False时每一列的值

可能没有看懂,我们看一个例子:
在这里插入图片描述
默认为False,返回一个二维的张量,其中每一个元素都是非零元素所在的位置
而当值改为True时:
在这里插入图片描述
直接返回三个tensor,而将每个tensor中对应位置拼在一起的话就是input中非零元素所在的位置。

  • 当然此方法不只可以取出非零元素的位置,还可以取出任意条件的元素位置(使用条件语句即可),如下所示:

在这里插入图片描述
得到了a中大于1的元素的位置
在这里插入图片描述
此方法其实是判断括号中的条件是否满足,如果只传入a,那么就是元素为0时不满足,为1时满足。

但是不可以取区间,试了一下一下两种方法全部不可以:
在这里插入图片描述
在这里插入图片描述
经评论区Df_cjc指出,此方法就是根据bool tensor取出指定tensor中的对应值,所以需要多个条件的情况下,首先取得多个bool tensor,然后对它们使用集合操作合并为新的bool tensor后即可放入此方法里
如下所示:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值