$$\newcommand{L}[1]{\| #1 \|}\newcommand{VL}[1]{\L{ \vec{#1} }}\newcommand{R}[1]{\operatorname{Re}\,(#1)}\newcommand{I}[1]{\operatorname{Im}\, (#1)}$$

# Slicing with boolean vectors¶

We have already seen how to slice arrays using colons and integers.

The colon means ‘all the elements on this axis’:

>>> import numpy as np
>>> an_array = np.array([[0, 1, 2, 3], [4, 5, 6, 7]])
>>> # All rows, only the second column
>>> an_array[:, 1]
array([1, 5])

>>> # Only the first row, all columns except the first
>>> an_array[0, 1:]
array([1, 2, 3])


We have also seen how to slice using a boolean array the same shape as the original:

>>> is_gt_5 = an_array > 5
>>> is_gt_5
array([[False, False, False, False],
[False, False,  True,  True]], dtype=bool)

>>> # Select elements greater than 5 into 1D array
>>> an_array[is_gt_5]
array([6, 7])


We can also use boolean vectors to select elements on a particular axis. So, for example, let’s say we want the first and last elements on the second axis. We can use a boolean vector to select these elements from a particular axis, while still using integer and colon syntax for the other axes:

>>> want_first_last = np.array([True, False, False, True])

>>> # All rows, columns as identified by boolean vector
>>> an_array[:, want_first_last]
array([[0, 3],
[4, 7]])