Accessing single elements provides precise control. However, working with a sequence or segment of elements within a one-dimensional array is often necessary. Slicing lets you extract a portion of an array based on a range of indices. If you've worked with Python lists, NumPy slicing will feel familiar, but it's optimized for NumPy's array structure.
The syntax for slicing a 1D array arr is arr[start:stop:step]. Let's break down these components:
start: The index where the slice begins (inclusive). If omitted, it defaults to the beginning of the array (index 0).stop: The index where the slice ends (exclusive). The element at this index is not included in the slice. If omitted, it defaults to the end of the array.step: The interval between elements to select. If omitted, it defaults to 1 (selecting consecutive elements).Let's create a simple array to work with:
import numpy as np
# Create a 1D array from 0 to 9
arr = np.arange(10)
print(arr)
# Output: [0 1 2 3 4 5 6 7 8 9]
Now, let's see some slicing examples:
Selecting elements from index 2 up to (but not including) index 5:
slice1 = arr[2:5]
print(slice1)
# Output: [2 3 4]
This selects elements at index 2, 3, and 4.
Selecting elements from the beginning up to index 4:
slice2 = arr[:4] # Omitting 'start' defaults to 0
print(slice2)
# Output: [0 1 2 3]
This selects elements from index 0 up to (but not including) index 4.
Selecting elements from index 5 to the end:
slice3 = arr[5:] # Omitting 'stop' defaults to the end
print(slice3)
# Output: [5 6 7 8 9]
This selects elements from index 5 through the last element.
Selecting the entire array:
slice4 = arr[:] # Omitting 'start' and 'stop'
print(slice4)
# Output: [0 1 2 3 4 5 6 7 8 9]
The step value allows you to select non-consecutive elements:
Selecting every second element:
slice5 = arr[::2] # Select every 2nd element from start to end
print(slice5)
# Output: [0 2 4 6 8]
Selecting every second element within a specific range (index 1 to 7):
slice6 = arr[1:7:2] # Start at 1, stop before 7, step by 2
print(slice6)
# Output: [1 3 5]
Just like with single element access, you can use negative indices in slices. -1 refers to the last element, -2 to the second-to-last, and so on.
Selecting the last 3 elements:
slice7 = arr[-3:]
print(slice7)
# Output: [7 8 9]
Selecting elements from the beginning up to the last 2 elements:
slice8 = arr[:-2]
print(slice8)
# Output: [0 1 2 3 4 5 6 7]
Reversing the array using a negative step:
reversed_arr = arr[::-1]
print(reversed_arr)
# Output: [9 8 7 6 5 4 3 2 1 0]
This is a significant aspect of NumPy slicing: slices of arrays return views rather than copies of the array data. This means the slice is just a different way of looking at the same underlying data. Modifying elements within a slice will affect the original array.
Let's see this in action:
print("Original array:", arr)
# Original array: [0 1 2 3 4 5 6 7 8 9]
# Create a slice
arr_slice = arr[5:8]
print("Slice:", arr_slice)
# Slice: [5 6 7]
# Modify an element in the slice
arr_slice[1] = 999
print("Modified slice:", arr_slice)
# Modified slice: [ 5 999 7]
# Check the original array
print("Original array after slice modification:", arr)
# Original array after slice modification: [ 0 1 2 3 4 5 999 7 8 9]
As you can see, changing the element at index 1 of arr_slice (which corresponds to index 6 of the original arr) also changed the value in arr. This behavior is designed for performance and memory efficiency, as it avoids unnecessary data duplication, especially with large arrays common in data analysis and scientific computing.
If you explicitly need a copy of a slice, so that modifications don't affect the original, you can use the copy() method:
arr_copy = arr[5:8].copy()
arr_copy[1] = 111 # Modify the copy
print("Original array:", arr) # Unchanged by copy modification
# Original array: [ 0 1 2 3 4 5 999 7 8 9]
print("Copied slice:", arr_copy)
# Copied slice: [ 5 111 7]
Understanding slicing and the view-versus-copy distinction is fundamental for manipulating data effectively and avoiding unexpected side effects in your NumPy code.
Was this section helpful?
© 2026 ApX Machine LearningEngineered with