How to Shift Elements in NumPy Array (With Examples)

Shifting elements in a NumPy array is a process that involves changing the position of elements within the array. This can be done using the NumPy roll() and shift() methods. These methods allow for the shifting of elements in the array by a given number of positions. The roll() method maintains the original shape of the array while the shift() method can change the shape of the array depending on the number of positions shifted. Examples of how to use these methods can be found in the NumPy documentation.


You can use one of the following methods to shift the elements in a NumPy array:

Method 1: Shift Elements (Keep All Original Elements)

#shift each element two positions to the right
data_new = np.roll(data, 2)

Method 2: Shift Elements (Allow Elements to Be Replaced)

#define shifting function
def shift_elements(arr, num, fill_value):
    result = np.empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr
    return result

#shift each element two positions to the right (replace shifted elements with zero)
data_new = shift_elements(data, 2, 0)

The following examples show how to use each method in practice.

Method 1: Shift Elements (Keep All Original Elements)

The following code shows how to use the function to shift each element in a NumPy array two positions to the right:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#shift each element two positions to the right
data_new = np.roll(data, 2)

#view new NumPy array
data_new

array([5, 6, 1, 2, 3, 4])

Notice that each element was shifted two positions to the right and elements at the end of the array simply got moved to the front.

We could also use a negative number in the np.roll() function to shift elements to the left:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#shift each element three positions to the left
data_new = np.roll(data, -3)

#view new NumPy array
data_new

array([4, 5, 6, 1, 2, 3])

Method 2: Shift Elements (Allow Elements to Be Replaced)

We can also define a custom function to shift the elements in a NumPy array and allow elements that are shifted to be replaced by a certain value.

For example, we can define the following function to shift elements and replace any shifted elements with the value 0:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#define custom function to shift elements
def shift_elements(arr, num, fill_value):
    result = np.empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr
    return result

#shift each element two positions to the right and replace shifted values with zero
data_new = shift_elements(data, 2, 0)

#view new NumPy array
data_new

array([0, 0, 1, 2, 3, 4])

We can also use a negative number in the function to shift the elements to the left:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#define custom function to shift elements
def shift_elements(arr, num, fill_value):
    result = np.empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr
    return result

#shift each element three positions to the left and replace shifted values with 50
data_new = shift_elements(data, -3, 50)

#view new NumPy array
data_new

array([ 4,  5,  6, 50, 50, 50])

The following tutorials explain how to perform other common operations in NumPy:

x