Slicing a 3D tensor using two index tensor

Hi,
I have one 3D tensor X of shape [5, 16, 128] and I also have two 2-D tensors P and N containing indices of X in some order. P is of shape [5,6] and N is of shape [5,10].

How do I slice X using P and N to get two tensors of shape X1 = [5,6,128] and X2 = [5,10,128]?

X = torch.randn(5, 16, 128)
P = torch.tensor([[0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5],
        [0, 1, 2, 3, 4, 5]])
N = torch.tensor([[ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
        [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
        [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
        [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
        [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15]])

X[P, :] = ? 
X[N, :] = ?
*** IndexError: index 5 is out of bounds for dimension 0 with size 5

I tried X[P, :] since I thought the 3rd dim (of shape 128) would get carried forward with : but I get an error. How do I do this in pytorch? (in Tensorflow i am aware of tf.gather)

thanks,
srk

Note: first first dim of index tensors P and N is same as X and second dim of P and N (6+10) add to the second dim of X (16).

If you want to simply split X into two tensors of shape [5,6,128] and [5,10,128] then you can use

X1,X2 = torch.split(X,[6,10])