10

I have not understood the difference between axis in a multidimensional array in NumPy. Can you explain to me? In particular, I would like to know where are axis0, axis1 and axis2 in a NumPy tridimensional array. And why?

1

2 Answers 2

20

The easiest way is with an example:

In [8]: x = np.array([[1, 2, 3], [4,5,6],[7,8,9]], np.int32)

In [9]: x
Out[9]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]], dtype=int32)

In [10]: x.sum(axis=0)  # sum the columns [1,4,7] = 12, [2,5,8] = 15 [3,6,9] = 18  
Out[10]: array([12, 15, 18])

In [11]: x.sum(axis=1)    # sum the rows [1,2,3] = 6, [4,5,6] = 15 [7,8,9] = 24
Out[11]: array([ 6, 15, 24])

axis 0 are the columns and axis 1 are the rows.

In a three dimensional array:

In [26]: x = np.array((((1,2), (3,4) ), ((5,6),(7,8))))
In [27]: x
Out[27]: 
   array([[[1, 2],
           [3, 4]],
          [[5, 6],
           [7, 8]]])
In [28]: x.shape # dimensions of the array
Out[28]: (2, 2, 2)

In [29]: x.sum(axis=0)
Out[29]: 
array([[ 6,  8],   #  [1,5] = 6 [2,6] = 8 [3,7] = 10 [4, 8] = 12
      [10, 12]])
In [31]: x.sum(axis=1)
Out[31]: 
    array([[ 4,  6],   # [1,3] = 4 [2,4] = 6 [5, 7] = 12 [6, 8] = 14
           [12, 14]])
In [33]: x.sum(axis=2) # [1, 2] = 3 [3, 4] = 7 [5, 6] = 11 [7, 8] = 15
Out[33]: 
array([[ 3,  7],
       [11, 15]])

In [77]: x.ndim # number of dimensions of the array
Out[77]: 3

Link for a good tutorial on using multidimensional data arrays

Sign up to request clarification or add additional context in comments.

4 Comments

So I can say that the axis0 is the first element of the tuple of the command "shape", the axis1 the second element and the axis2 the third element. Is it right?
yes exactly. It is a 2*2*2 array. You can access particular elements using x[0][0][1] etc..
"axis 0 are the columns and axis 1 are the rows." Or put it another way from which I managed to understand how numpy axes work: "axis 0 is the outermost axis indexing the largest subarrays while axis n-1 is the innermost axis indexing individual elements.
Or put it yet another way: x.sum(axis=0) is x[sum][*][*], x.sum(axis=1) is x[*][sum][*], x.sum(axis=2) is x[*][*][sum].
3

The axes can be named by traversing through the n-dimensional array, right from the outside of the array to the inside till we reach the actual scalar elements. The outermost dimension will always be axis 0 and the the innermost dimension(scalar elements) will be axis n-1. The below link will be more useful in imagining and realising NumPy axes - How does NumPy's transpose() method permute the axes of an array?

Cheat Code #1: When you use the NumPy sum function with the axis parameter, the axis that you specify is the axis that gets collapsed.

Cheat Code #2: When we use the axis parameter with the np.concatenate() function, the axis parameter defines the axis along which we stack the arrays.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.