How Pytorch Tensor Get The Index Of Specific Value
Solution 1:
I think there is no direct translation from list.index()
to a pytorch function. However, you can achieve similar results using tensor==number
and then the nonzero()
function. For example:
t = torch.Tensor([1, 2, 3])
print ((t == 2).nonzero(as_tuple=True)[0])
This piece of code returns
1
[torch.LongTensor of size 1x1]
Solution 2:
For multidimensional tensors you can do:
(tensor == target_value).nonzero(as_tuple=True)
The resulting tensor will be of shape number_of_matches x tensor_dimension
. For example, say tensor
is a 3 x 4
tensor (that means the dimension is 2), the result will be a 2D-tensor with the indexes for the matches in the rows.
tensor = torch.Tensor([[1, 2, 2, 7], [3, 1, 2, 4], [3, 1, 9, 4]])
(tensor == 2).nonzero(as_tuple=False)
>>> tensor([[0, 1],
[0, 2],
[1, 2]])
Solution 3:
Based on others' answers:
t = torch.Tensor([1, 2, 3])
print((t==1).nonzero().item())
Solution 4:
Can be done by converting to numpy as follows
import torch
x = torch.range(1,4)
print(x)
===> tensor([ 1., 2., 3., 4.])
nx = x.numpy()
np.where(nx == 3)[0][0]
===> 2
Solution 5:
The answers already given are great but they don't handle when I tried it when there is no match. For that see this:
def index(tensor: Tensor, value, ith_match:int =0) -> Tensor:
"""
Returns generalized index (i.e. location/coordinate) of the first occurence of value
in Tensor. For flat tensors (i.e. arrays/lists) it returns the indices of the occurrences
of the value you are looking for. Otherwise, it returns the "index" as a coordinate.
If there are multiple occurences then you need to choose which one you want with ith_index.
e.g. ith_index=0 gives first occurence.
Reference: https://stackoverflow.com/a/67175757/1601580
:return:
"""# bool tensor of where value occurred
places_where_value_occurs = (tensor == value)
# get matches as a "coordinate list" where occurence happened
matches = (tensor == value).nonzero() # [number_of_matches, tensor_dimension]if matches.size(0) == 0: # no matchesreturn -1else:
# get index/coordinate of the occurence you want (e.g. 1st occurence ith_match=0)index = matches[ith_match]
returnindex
credit to this great answer: https://stackoverflow.com/a/67175757/1601580
Post a Comment for "How Pytorch Tensor Get The Index Of Specific Value"