5.3. Array Axis

../../_images/numpy-index-1.png
../../_images/numpy-index-2.png
../../_images/numpy-index-3.png
../../_images/numpy-index-4.png
../../_images/numpy-index-5.png
../../_images/numpy-index-6.png
../../_images/numpy-attributes-1d.png
../../_images/numpy-attributes-2d.png
../../_images/numpy-attributes-3d.png
../../_images/numpy-attributes-4d.png
../../_images/array-axis.png

Figure 5.6. Visualizing Multi-Dimensional Arrays [1]

5.3.1. SetUp

>>> import numpy as np

5.3.2. Axis

  • New dimensions are added at the beginning of shape

  • Old axes numbers are pushed to the right

One Dimensions:

>>> a = np.array([1, 2, 3])
>>>
>>> a.shape
(3,)
>>>
>>> a.ndim
1
axis=0   # columns
axis=-0  # columns

Two Dimensions:

>>> a = np.array([[1, 2, 3],
...               [4, 5, 6]])
>>>
>>> a.shape
(2, 3)
>>>
>>> a.ndim
2
axis=0   # rows
axis=1   # columns

axis=-0  # rows
axis=-1  # columns

Three Dimensions:

>>> a = np.array([[[1, 2, 3],
...                [4, 5, 6]],
...
...               [[11, 22, 33],
...                [44, 55, 66]]])
>>>
>>> a.shape
(2, 2, 3)
>>>
>>> a.ndim
3
axis=0   # depth
axis=1   # rows
axis=2   # columns

axis=-0  # depth
axis=-1  # columns
axis=-2  # rows

Four Dimensions:

>>> a = np.array([[[[1, 2, 3],
...                 [4, 5, 6]],
...
...                [[11, 22, 33],
...                 [44, 55, 66]]],
...
...                [[[1, 2, 3],
...                  [4, 5, 6]],
...
...                [[11, 22, 33],
...                 [44, 55, 66]]]])
>>>
>>> a.shape
(2, 2, 2, 3)
>>>
>>> a.ndim
4
axis=0   # depth
axis=1   # rows
axis=2   # columns

axis=-0  # depth
axis=-1  # columns
axis=-2  # rows

5.3.3. Take

One Dimensional:

>>> a = np.array([1, 2, 3])
>>>
>>> a.shape
(3,)
>>>
>>> a[0]
1
>>> a[1]
2
>>> a[2]
3
>>>
>>> a.take(0, axis=0)
1
>>> a.take(1, axis=0)
2
>>> a.take(2, axis=0)
3
>>>
>>> a.take(0, axis=-1)
1
>>> a.take(1, axis=-1)
2
>>> a.take(2, axis=-1)
3
>>>
>>> a[:, 1]
Traceback (most recent call last):
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
>>>
>>> a.take(0, axis=1)
Traceback (most recent call last):
numpy.exceptions.AxisError: axis 1 is out of bounds for array of dimension 1

Two Dimensional - Rows:

>>> a = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
>>> a.shape
(3, 3)
>>> a[0, :]
array([1, 2, 3])
>>> a[1, :]
array([4, 5, 6])
>>> a[2, :]
array([7, 8, 9])
>>> a.take(0, axis=0)
array([1, 2, 3])
>>> a.take(1, axis=0)
array([4, 5, 6])
>>> a.take(2, axis=0)
array([7, 8, 9])

Two Dimensional - Columns:

>>> a = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
>>> a.shape
(3, 3)
>>> a[:, 0]
array([1, 4, 7])
>>> a[:, 1]
array([2, 5, 8])
>>> a[:, 2]
array([3, 6, 9])
>>> a.take(0, axis=1)
array([1, 4, 7])
>>> a.take(1, axis=1)
array([2, 5, 8])
>>> a.take(2, axis=1)
array([3, 6, 9])
>>> a.take(0, axis=-1)
array([1, 4, 7])
>>> a.take(1, axis=-1)
array([2, 5, 8])
>>> a.take(2, axis=-1)
array([3, 6, 9])

Three Dimensional - Depth:

>>> a = np.array([[[ 1,  2,  3],
...                [ 4,  5,  6],
...                [ 5,  6,  7]],
...
...               [[11, 22, 33],
...                [44, 55, 66],
...                [77, 88, 99]]])
>>> a.shape
(2, 3, 3)
>>> a[0, :, :]
array([[1, 2, 3],
       [4, 5, 6],
       [5, 6, 7]])
>>>
>>> a[1, :, :]
array([[11, 22, 33],
       [44, 55, 66],
       [77, 88, 99]])
>>>
>>> a[2, :, :]
Traceback (most recent call last):
IndexError: index 2 is out of bounds for axis 0 with size 2
>>> a.take(0, axis=0)
array([[1, 2, 3],
       [4, 5, 6],
       [5, 6, 7]])
>>>
>>> a.take(1, axis=0)
array([[11, 22, 33],
       [44, 55, 66],
       [77, 88, 99]])
>>>
>>> a.take(2, axis=0)
Traceback (most recent call last):
IndexError: index 2 is out of bounds for axis 0 with size 2

Three Dimensional - Rows:

>>> a = np.array([[[ 1,  2,  3],
...                [ 4,  5,  6],
...                [ 5,  6,  7]],
...
...               [[11, 22, 33],
...                [44, 55, 66],
...                [77, 88, 99]]])
>>>
>>> a.shape
(2, 3, 3)
>>>
>>> a[:, 0, :]
array([[ 1,  2,  3],
       [11, 22, 33]])
>>>
>>> a[:, 1, :]
array([[ 4,  5,  6],
       [44, 55, 66]])
>>>
>>> a[:, 2, :]
array([[ 5,  6,  7],
       [77, 88, 99]])
>>>
>>> a.take(0, axis=1)
array([[ 1,  2,  3],
       [11, 22, 33]])
>>>
>>> a.take(1, axis=1)
array([[ 4,  5,  6],
       [44, 55, 66]])
>>>
>>> a.take(2, axis=1)
array([[ 5,  6,  7],
       [77, 88, 99]])

Three Dimensional - Columns:

>>> a = np.array([[[ 1,  2,  3],
...                [ 4,  5,  6],
...                [ 5,  6,  7]],
...
...               [[11, 22, 33],
...                [44, 55, 66],
...                [77, 88, 99]]])
>>>
>>> a.shape
(2, 3, 3)
>>>
>>> a[:, :, 0]
array([[ 1,  4,  5],
       [11, 44, 77]])
>>>
>>> a[:, :, 1]
array([[ 2,  5,  6],
       [22, 55, 88]])
>>>
>>> a[:, :, 2]
array([[ 3,  6,  7],
       [33, 66, 99]])
>>>
>>> a.take(0, axis=2)
array([[ 1,  4,  5],
       [11, 44, 77]])
>>>
>>> a.take(1, axis=2)
array([[ 2,  5,  6],
       [22, 55, 88]])
>>>
>>> a.take(2, axis=2)
array([[ 3,  6,  7],
       [33, 66, 99]])
>>>
>>> a.take(0, axis=-1)
array([[ 1,  4,  5],
       [11, 44, 77]])
>>>
>>> a.take(1, axis=-1)
array([[ 2,  5,  6],
       [22, 55, 88]])
>>>
>>> a.take(2, axis=-1)
array([[ 3,  6,  7],
       [33, 66, 99]])

5.3.4. Use Case - 0x01

>>> shape = (5,)

Positive:

>>> shape[0]
5

Negative:

>>> shape[-1]
5

5.3.5. Use Case - 0x02

>>> shape = (4, 5)

Positive:

>>> shape[0]
4
>>>
>>> shape[1]
5

Negative:

>>> shape[-1]
5
>>>
>>> shape[-2]
4

5.3.6. Use Case - 0x03

>>> shape = (3, 4, 5)

Positive:

>>> shape[0]
3
>>>
>>> shape[1]
4
>>>
>>> shape[2]
5

Negative:

>>> shape[-1]
5
>>>
>>> shape[-2]
4
>>>
>>> shape[-3]
3

5.3.7. Use Case - 0x04

>>> shape = (2, 3, 4, 5)

Positive:

>>> shape[0]
2
>>>
>>> shape[1]
3
>>>
>>> shape[2]
4
>>>
>>> shape[3]
5

Negative:

>>> shape[-1]
5
>>>
>>> shape[-2]
4
>>>
>>> shape[-3]
3
>>>
>>> shape[-4]
2

5.3.8. References