Hi,
I have 2 tensors like below:
hc1 = torch.randn(5,1, 1, 1)
hc2 = torch.randn(5,1, 1, 1)
I want to concatenate these 2 tensors as hc3 and then sort hc3 based on amounts of hc1.
How could I do it?
Thanks
Hi,
I have 2 tensors like below:
hc1 = torch.randn(5,1, 1, 1)
hc2 = torch.randn(5,1, 1, 1)
I want to concatenate these 2 tensors as hc3 and then sort hc3 based on amounts of hc1.
How could I do it?
Thanks
Could you post a simple example with some values?
You could concatenate these tensor using out = torch.cat((hc1, hc2), dim=dim)
, however I’m not sure, how you would like to sort the tensors.
Dear ptrblck,
Thanks for your reply. Sure. I simplify my question with changing the dimensions of tensors to 2. Suppose we have these 2 tensors:
hc1 = tensor([[30],
[20],
[10],
[50],
[40]])
hc2=tensor([[1],
[2],
[3],
[4],
[5]])
1, 2, 3, 4, 5 are, subsequently, related to 30, 20, 10, 50, 40.
After sorting hc1 we would have 10, 20, 30, 40, 50 and 3, 2, 1, 5, 4. Because hc1 and hc2 are 1 to 1.
I thought that I should concatenate them as hc3 and sort it based on hc1.
I hope that I explained my question as well as possible.
Thanks
Hi,
You can get the permutation by calling perm = hc1.argsort(dim=0).squeeze()
.
In your example it returns tensor([2, 1, 0, 4, 3])
Then you can rearrange hc2 with this permutation : hc2_rearranged = hc2[perm]
.
In your example it returns
tensor([[3.],
[2.],
[1.],
[5.],
[4.]])
You can always concatenate those afterwards
Thanks for your reply.
I can not understand how to have sorted hc1 while you achieved sorted indices of hc1? Is there any way?
Thanks
Dear Phan_Phan,
Oh, how funny question I asked. It just needs to write:
print(hc1[perm])
Many thanks