Python: Slice Notation on NumPy Arrays

Introduction

The term slicing in programming usually refers to obtaining a substring, sub-tuple, or sublist from a string, tuple, or list respectively.

Python offers an array of straightforward ways to slice not only these three but any iterable. An iterable is, as the name suggests, any object that can be iterated over.

In this article, we'll go over everything you need to know about Slicing Numpy Arrays in Python.

NumPy Array slicing

The most common way to slice a NumPy array is by using the : operator with the following syntax:

array[start:end]
array[start:end:step]

The start parameter represents the starting index, end is the ending index, and step is the number of items that are "stepped" over.

NumPy is a free Python package that offers, among other things, n-dimensional arrays.

Slicing 1D (one dimensional) arrays in NumPy can be done with the same notation as slicing regular lists in Python:

import numpy as np
arr = np.array([1,2,3,4])
print(arr[1:3:2])
print(arr[:3])
print(arr[::2])

Output:

[2]
[1 2 3]
[1 3]

2D NumPy Array Slicing

A 2D array in NumPy is an array of arrays, a 3D array is an array of arrays of arrays and so forth. A 2D array can be represented as a matrix like so:

import numpy
arr = numpy.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(arr)

Let's print this matrix out:

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

Slicing a 2D array can eighter result in an array or a matrix. The syntax that results in a matrix would be:

arr[startx:endx:stepx, starty:endy:stepy]

The syntax that results in an array:

arr[startx:endx:stepx, const]
arr[const, starty:endy:stepy]

Utilizing this syntax results in a matrix who's elements are the colums in the range from startx to endx on the x-axis, and rows in the range from starty to endy on the y-axis of the original matrix:

Let's take a look at how we can slice this matrix and what the slicing results in:

import numpy

arr = numpy.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
print("The original matrix:")
print(arr)

print("A sliced submatrix:")
print(arr[1:4,2:4])

print("A sliced subarray:")
print(arr[1,:])

print("A sliced submatrix:")
print(arr[:,3:])

print("A sliced subarray:")
print(arr[:,3])

This code segment prints out:

The original matrix:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
A sliced submatrix:
[[ 7  8]
 [11 12]
 [15 16]]
A sliced subarray:
[5 6 7 8]
A sliced submatrix:
[[ 4]
 [ 8]
 [12]
 [16]]
A sliced subarray:
[ 4  8 12 16]

Conclusion

Slicing any sequence in Python is easy, simple, and intuitive. Negative indexing offers an easy way to acquire the first or last few elements of a sequence, or reverse its order.

In this article, we've covered how to slice Python's NumPy arrays.

Author image
CS student with a passion for juggling and math.