Hello, I need help
I have a torch tensor of size [1124823 x 13] and I want from the center " of the tensor to take five frames from the right and five frames from the left and concatenate them is there is any function do this?
" N.B."
Hi,
You can use things like t[base-5:base+5]
where base is whatever you call the center of your Tensor
sorry I can’t understand what is (t) and what is the base
t
would be your Tensor of size [1124823 x 13].
And base is the index (as a python number) of the center. So something like base = t.size(0) // 2
.
Do you mean this
base = feat.size(0)//2
x = feat[base-5: base:+5]
Yes if your tensor is called feat
that will work.
Thanks albanD
But can I ask you if I want to go inside the center of each raw of the tensor take five elements from left and five from right
i = 0
j = 6
base = feat.szie(0)//2
for i in feat[i, j]:
x = feat[base - 5: base:+5]
i += 1
If you want to take form the second dimension, you can use the indexing syntax like: x = feat[:, base-5, base+5]
. Or you can use the specialized function to get a subset: x = feat.narrow(1, base - 5, 10)
. The two will give exactly the same result.
Not excatly, I want to go form the center of each raw take five numbers from the left and five numbers from right
Rows are the second dimension for a 2D Tensor. So that should work.
Maybe you want to share an example with a given Tensor and which values you expect to get?
x = feat.narrow(1, base - 5, 10)
IndexError: Dimension out of range (expected to be in range of [-13, 12], but got 562406)
This is because the center of the second dimension is not the same as the one in the first dimension.
I am really confused about what you’re trying to do. I think an example of input/output that you want would help.
The tensor size [ 1124823 x 13 ]. So I want to slice each raw from its center and take 10 elements, 5 from the right and five from left. So I need to iterate through every raw.
What do you mean by “raw”? row?
If you have a Tensor of size [ 1124823 x 13 ], a single row is a 1D Tensor of size 13.
So you want to do: feat.narrow(1, feat.size(1)//2 -5, 10)
.
Yes, sorry for this typo it is raw.
But, Do I need a for loop to iterate for each raw
No, the operation above will give a Tensor of size [ 1124823 x 10 ]
containing the result for every row.