Skip to content

Indexing and Slicing Arrays

Indexing 1D arrays

1d
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
 
print(arr[0])   # 10
print(arr[3])   # 40
print(arr[-1])  # 50
1d
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
 
print(arr[0])   # 10
print(arr[3])   # 40
print(arr[-1])  # 50

Slicing 1D arrays

Slicing uses start:stop:stepstart:stop:step (stop is excluded).

slice
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
 
print(arr[1:4])   # [20 30 40]
print(arr[:3])    # [10 20 30]
print(arr[::2])   # [10 30 50]
print(arr[::-1])  # reverse
slice
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
 
print(arr[1:4])   # [20 30 40]
print(arr[:3])    # [10 20 30]
print(arr[::2])   # [10 30 50]
print(arr[::-1])  # reverse

Indexing 2D arrays (rows/columns)

2d
import numpy as np
 
mat = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
 
print(mat[0, 0])  # 1
print(mat[1, 2])  # 6
print(mat[2, :])  # full row
print(mat[:, 1])  # full column
2d
import numpy as np
 
mat = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
 
print(mat[0, 0])  # 1
print(mat[1, 2])  # 6
print(mat[2, :])  # full row
print(mat[:, 1])  # full column

Sub-arrays (2D slicing)

subarray
import numpy as np
 
mat = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
 
# rows 0..1 and cols 1..2
sub = mat[0:2, 1:3]
print(sub)
subarray
import numpy as np
 
mat = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
 
# rows 0..1 and cols 1..2
sub = mat[0:2, 1:3]
print(sub)

Views vs copies (important)

Many slices are views (they share memory).

view
import numpy as np
 
arr = np.array([1, 2, 3, 4, 5])
sub = arr[1:4]   # view
sub[0] = 999
 
print(arr)  # original changed
view
import numpy as np
 
arr = np.array([1, 2, 3, 4, 5])
sub = arr[1:4]   # view
sub[0] = 999
 
print(arr)  # original changed

To force a copy:

copy
sub = arr[1:4].copy()
copy
sub = arr[1:4].copy()

Boolean indexing (masking)

Boolean indexing is extremely useful for analytics filtering.

mask
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
mask = arr > 25
 
print(mask)      # [False False  True  True  True]
print(arr[mask]) # [30 40 50]
mask
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
mask = arr > 25
 
print(mask)      # [False False  True  True  True]
print(arr[mask]) # [30 40 50]

Combine conditions

Use parentheses and && / ||:

mask2
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
print(arr[(arr >= 20) & (arr <= 40)])
mask2
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
print(arr[(arr >= 20) & (arr <= 40)])

Fancy indexing

Select multiple specific indices using a list/array:

fancy
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
print(arr[[0, 2, 4]])
fancy
import numpy as np
 
arr = np.array([10, 20, 30, 40, 50])
print(arr[[0, 2, 4]])

Next

Continue to: Shape Manipulation & Reshape to learn how to change dimensions safely.

๐Ÿงช Try It Yourself

Exercise 1 โ€“ Create a NumPy Array

Exercise 2 โ€“ Array Shape and Reshape

Exercise 3 โ€“ Array Arithmetic

If this helped you, consider buying me a coffee โ˜•

Buy me a coffee

Was this page helpful?

Let us know how we did