NickGnd

NickGnd

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

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

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 :v:

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:

Where Next?

Popular in Questions Top

openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
sacepums
Hey guys. I'm new to elixir and im really stocked about it. But I ran into a bit of problem - I need to convert a date sting, for examp...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
chewm
Hi guys, nice to meet you to the whole forum, I’m new here, I’m trying to configure visual studio code for elixir, right now the intellis...
New
Exadra37
Sometimes I want to check if the input into a function is not a blank string. My first approach: defmodule Example do def do_stuff(s...
New
sabri
Can someone explain the settings of pool_size of Ecto in config file? and what is the recommend size? Thanks
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
jc00ke
Expanding on this topic: https://forum.elixirforum.net/t/map-typespec-question/19217 Let’s say I have a map with required and optional k...
New

Other popular topics Top

JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
mgjohns61585
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
magnetic
Hey :wave:t3: Elixir community, I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New

We're in Beta

About us Mission Statement