Indexing 如何以GPU友好的方式获取2D张量中多个元素的索引?
这个问题与已经回答的问题类似,但是这个问题没有涉及如何检索多个元素的索引 我有一个2D张量Indexing 如何以GPU友好的方式获取2D张量中多个元素的索引?,indexing,pytorch,tensor,Indexing,Pytorch,Tensor,这个问题与已经回答的问题类似,但是这个问题没有涉及如何检索多个元素的索引 我有一个2D张量点,有许多行和少量列,我想得到一个包含该张量中所有元素行索引的张量。我事先知道点中存在哪些元素;它包含从0到999的整数元素,我可以使用range函数生成一个张量来反映可能的元素集。元素可以位于任何列中 如何检索每个元素出现在张量中的行索引,以避免循环或使用numpy,以便在GPU上快速执行此操作 我正在寻找类似于(points==elements)的东西。nonzero()[:,1] 谢谢 尝试torch
点
,有许多行和少量列,我想得到一个包含该张量中所有元素行索引的张量。我事先知道点中存在哪些元素;它包含从0到999的整数元素,我可以使用range函数生成一个张量来反映可能的元素集。元素可以位于任何列中
如何检索每个元素出现在张量中的行索引,以避免循环或使用numpy,以便在GPU上快速执行此操作
我正在寻找类似于(points==elements)的东西。nonzero()[:,1]
谢谢 尝试torch.cat([(t==i).nonzero()表示元素中的i\u to\u compare])
导入火炬
>>>t=火炬。空((15,4))。随机_0999
>>>t
张量([[429,833,393,828.],
[555., 893., 846., 909.],
[ 11., 861., 586., 222.],
[232., 92., 576., 452.],
[171., 341., 851., 953.],
[ 94., 46., 130., 413.],
[243., 251., 545., 331.],
[620., 29., 194., 176.],
[303., 905., 771., 149.],
[482., 225., 7., 315.],
[ 44., 547., 206., 299.],
[695., 7., 645., 385.],
[225., 898., 677., 693.],
[746., 21., 505., 875.],
[591., 254., 84., 888.]])
Numpy:
>>> np.nonzero(np.isin(t, [7,385]))
(array([ 9, 11, 11], dtype=int64), array([2, 1, 3], dtype=int64))
>>> np.nonzero(np.isin(t, [7,385]))[1]
array([2, 1, 3], dtype=int64)
尝试torch.cat([(t==i).nonzero()表示元素中的i\u to\u compare])
导入火炬
>>>t=火炬。空((15,4))。随机_0999
>>>t
张量([[429,833,393,828.],
[555., 893., 846., 909.],
[ 11., 861., 586., 222.],
[232., 92., 576., 452.],
[171., 341., 851., 953.],
[ 94., 46., 130., 413.],
[243., 251., 545., 331.],
[620., 29., 194., 176.],
[303., 905., 771., 149.],
[482., 225., 7., 315.],
[ 44., 547., 206., 299.],
[695., 7., 645., 385.],
[225., 898., 677., 693.],
[746., 21., 505., 875.],
[591., 254., 84., 888.]])
Numpy:
>>> np.nonzero(np.isin(t, [7,385]))
(array([ 9, 11, 11], dtype=int64), array([2, 1, 3], dtype=int64))
>>> np.nonzero(np.isin(t, [7,385]))[1]
array([2, 1, 3], dtype=int64)
我不确定我是否正确理解了您要查找的内容,但如果您想要某个值的索引,可以尝试使用
where
和结果的稀疏表示
例如,在下面的张量点中值998
出现在索引[0,0]
和[2,0]
中。要获得这些指数,可以:
In [34]: points=torch.tensor([ [998, 6], [1, 3], [998, 999], [2, 3] ] )
In [35]: torch.where(points==998, points, torch.tensor(0)).to_sparse().indices()
Out[35]:
tensor([[0, 2],
[0, 0]])
我不确定我是否正确理解了您要查找的内容,但如果您想要某个值的索引,可以尝试使用where
和结果的稀疏表示
例如,在下面的张量点中值998
出现在索引[0,0]
和[2,0]
中。要获得这些指数,可以:
In [34]: points=torch.tensor([ [998, 6], [1, 3], [998, 999], [2, 3] ] )
In [35]: torch.where(points==998, points, torch.tensor(0)).to_sparse().indices()
Out[35]:
tensor([[0, 2],
[0, 0]])