pytorch lstm output not match hidden state

Here is the code:

import torch
from torch.nn.utils.rnn import pack_sequence, pad_packed_sequence
rnn = torch.nn.LSTM(2, 3, 1, bidirectional=True)
x1= torch.randn(1,2)
x2=torch.randn(2,2)
x=pack_sequence([x1,x2], enforce_sorted=False)
y, (hn, cn) = rnn(x)
y,lens=pad_packed_sequence(y)

print the hidden state result:

print(torch.cat([hn[-2], hn[-1]], dim=1))

get result:

tensor([[-0.0265, -0.1149, -0.0466,  0.1080,  0.0901,  0.0865],
        [ 0.0736, -0.2503, -0.0634,  0.0801,  0.1401, -0.0032]],
       grad_fn=<CatBackward>)

print the output:

for i,j in enumerate(lens):
    print(y[i][j-1])

get result:

tensor([-0.0265, -0.1149, -0.0466,  0.1080,  0.0901,  0.0865],
       grad_fn=<SelectBackward>)
tensor([ 0.0736, -0.2503, -0.0634,  0.0932,  0.0962, -0.0915],
       grad_fn=<SelectBackward>)

the second tensor is not the same with the hidden state!

Why?

Which one should be used as result?

I think I had the same question where I also posted my answer. Maybe you can check if it indeed matches your concerns.

I still can not understand. Why the first tensor is match and the second is not.