# Best way to get the first n rows from a NX Tensor

Hey all, newbie here with a newbie question I’m wondering what’s the easier way to get the first `n` rows from a multi-dimensional tensor.

For instance, If I have a 3 dimension tensor like this:

``````t = Nx.tensor([
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
])

#Nx.Tensor<
s64
[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]
>
``````

How can I get the first 2 rows? I mean `[[0, 3, 6], [1, 4, 7]]`.

A simple solution is to transpose the tensor and then get the first 2 elements, like:

``````Nx.transpose(t)[0..1]

#Nx.Tensor<
s64
[
[0, 3, 6],
[1, 4, 7]
]
>
``````

But I was wondering if there is a more straightforward way to do that?
I’m asking because I have seen that with python (numpy) you can do that with `array[0:2]`.
This is just a curiosity, is not based on any particular needs.

``````❯ python3
>>> import numpy as np
>>> x1 = [1, 2, 3]
>>> x2 = [4, 5, 6]
>>> x3 = [7, 8, 9]
>>> X = np.column_stack([x1, x2, x3])
>>> X
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> X[0:2]
array([[1, 4, 7],
[2, 5, 8]])
``````

Thank you all in advance Cheers 1 Like

Ops. my fault. I have just realized that the created tensor in Nx is different to the array created in numpy. I didn’t realize it before because the tensor that I used as example was 3x3, but if I use a not squared tensor (eg. 3x2) it is evident.

``````x = Nx.tensor([
[0, 1],
[2, 3],
[4, 5]
])

# let's get the shape
Nx.shape(x)
{3, 2}
``````

Is not the same of:

``````import numpy as np
x1 = [0, 1]
x2 = [2, 3]
x3 = [4, 5]
X = np.column_stack([x1, x2, x3])

>>> X
array([[0, 2, 4],
[1, 3, 5]])

>>> X.shape
(2, 3)
``````

Basically, I need to transpose the tensor in Elixir to have the equivalent of the numpy array:

``````x = Nx.tensor([
[0, 1],
[2, 3],
[4, 5]
])

# let's get the shape
Nx.shape(x)
{3, 2}

# and transpose it
Nx.transpose(x)
#Nx.Tensor<
s64
[
[0, 2, 4],
[1, 3, 5]
]
>
`````` 1 Like
``````t = Nx.tensor([
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
])

t
|> Nx.slice([0, 0], [3, 2])  # slice from index (0, 0) and take 3 and 2 elements respectively along each axis
|> Nx.transpose()
``````

returns

``````#Nx.Tensor<
s64
[
[0, 3, 6],
[1, 4, 7]
]
>
``````
1 Like

Thank youuuu @Aetherus 