How to index torch.Tensor
using Tensor
Published:
How to index torch.Tensor
using Tensor
?
In numpy.Aarray
or torch.Tensor
, we have the following methods to index an Array
or Tensor
:
np_a = np.random.randn((30,4,5))
ts_a = torch.randn((30,4,5))
1. Basic indexing: int
number to index one element
tmp = np_a[1]
tmp = ts_a[1]
2. Less basic indexing: start:end
to index a range of continuous elements
tmp = np_a[10:13]
tmp = ts_a[:13]
tmp = np_a[:-2]
3. Advanced indexing: index multiple elements in different positions (Indexing with Arrays/Tensors of Indices)
e.g. select the 1st, 3rd, 8th, and 29th element from np_a.
e.g. select the [0,0,0] and [1,1,1] and [20,1,2] three elements. #
Array with shape of [N,]
a = np.arange(12)**2 # the first 12 square numbers
i = np.array([1,1,3,8,5])
a[i] # array([ 1, 1, 9, 64, 25])
j = np.array([[3, 4], [9, 7]]) # a bidimensional array of indices
a[j] # the same shape as `j` array([[ 9, 16], [81, 49]])
Array with shape of [N,M,…]
https://numpy.org/doc/stable/user/quickstart.html#advanced-indexing-and-index-tricks
Using one Array_A to index another Array_B, the new Array has the same shape with Array_A.
What will happen if using multiple Arrays to index another Array_T?
Answer: The ‘multiple Arrays’ should have the same shapes and the number of Arrays should be the same as the dimensions of the target Array_T. Then the output Array has the same shape with the indexing Arrays.
What will happen if the dimension of target Array is smaller than the indexing Array?
e.g.
Arr_T = np.ones((5,6))
Arr_idx = np.ones((2,3,4))
Arr_T[Arr_idx,Arr_idx]
It does not matter. The output Array has the same shape with Arr_idx
.
Note: The first and second method also apply to list
.
Leave a Comment