在PyTorch中Tensor的查找和筛选例子
本文源码基于版本1.0,交互界面基于0.4.1
importtorch
按照指定轴上的坐标进行过滤
index_select()
沿着某tensor的一个轴dim筛选若干个坐标
>>>x=torch.randn(3,4)#目标矩阵 >>>x tensor([[0.1427,0.0231,-0.5414,-1.0009], [-0.4664,0.2647,-0.1228,-1.1068], [-1.1734,-0.6571,0.7230,-0.6004]]) >>>indices=torch.tensor([0,2])#在轴上筛选坐标 >>>torch.index_select(x,dim=0,indices)#指定筛选对象、轴、筛选坐标 tensor([[0.1427,0.0231,-0.5414,-1.0009], [-1.1734,-0.6571,0.7230,-0.6004]]) >>>torch.index_select(x,dim=1,indices) tensor([[0.1427,-0.5414], [-0.4664,-0.1228], [-1.1734,0.7230]])
where()
用于将两个broadcastable的tensor组合成新的tensor,类似于c++中的三元操作符“?:”
>>>x=torch.randn(3,2) >>>y=torch.ones(3,2) >>>torch.where(x>0,x,y) tensor([[1.4013,1.0000], [1.0000,0.9267], [1.0000,0.4302]]) >>>x tensor([[1.4013,-0.9960], [-0.3715,0.9267], [-0.7163,0.4302]])
指定条件返回01-tensor
>>>x=torch.arange(5) >>>x tensor([0,1,2,3,4]) >>>torch.gt(x,1)#大于 tensor([0,0,1,1,1],dtype=torch.uint8) >>>x>1#大于 tensor([0,0,1,1,1],dtype=torch.uint8) >>>torch.ne(x,1)#不等于 tensor([1,0,1,1,1],dtype=torch.uint8) >>>x!=1#不等于 tensor([1,0,1,1,1],dtype=torch.uint8) >>>torch.lt(x,3)#小于 tensor([1,1,1,0,0],dtype=torch.uint8) >>>x<3#小于 tensor([1,1,1,0,0],dtype=torch.uint8) >>>torch.eq(x,3)#等于 tensor([0,0,0,1,0],dtype=torch.uint8) >>>x==3#等于 tensor([0,0,0,1,0],dtype=torch.uint8)
返回索引
>>>x=torch.arange(5) >>>x#1维 tensor([0,1,2,3,4]) >>>torch.nonzero(x) tensor([[1], [2], [3], [4]]) >>>x=torch.Tensor([[0.6,0.0,0.0,0.0],[0.0,0.4,0.0,0.0],[0.0,0.0,1.2,0.0],[0.0,0.0,0.0,-0.4]]) >>>x#2维 tensor([[0.6000,0.0000,0.0000,0.0000], [0.0000,0.4000,0.0000,0.0000], [0.0000,0.0000,1.2000,0.0000], [0.0000,0.0000,0.0000,-0.4000]]) >>>torch.nonzero(x) tensor([[0,0], [1,1], [2,2], [3,3]])
借助nonzero()我们可以返回符合某一条件的index(https://stackoverflow.com/questions/47863001/how-pytorch-tensor-get-the-index-of-specific-value)
>>>x=torch.arange(12).view(3,4) >>>x tensor([[0,1,2,3], [4,5,6,7], [8,9,10,11]]) >>>(x>4).nonzero() tensor([[1,1], [1,2], [1,3], [2,0], [2,1], [2,2], [2,3]])
以上这篇在PyTorch中Tensor的查找和筛选例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。