NickGnd

NickGnd

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

Hey all, newbie here with a newbie question :waving_hand:

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[3][3]
  [
    [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[2][3]
  [
    [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 :bowing_man:
Cheers :victory_hand:

Marked As Solved

Aetherus

Aetherus

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[2][3]
  [
    [0, 3, 6],
    [1, 4, 7]
  ]
>

Also Liked

NickGnd

NickGnd

Ops. my fault. :man_facepalming:
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[2][3]
  [
    [0, 2, 4],
    [1, 3, 5]
  ]
>

:man_facepalming:

Last Post!

NickGnd

NickGnd

Thank youuuu @Aetherus :bowing_man:

Where Next?

Popular in Questions Top

New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New

Other popular topics Top

hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement