第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后即可放入此方法里
如下所示: