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 np.roll() 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])
Additional Resources
The following tutorials explain how to perform other common operations in NumPy:
How to Count Occurrences of Elements in NumPy
How to Sort a NumPy Array by Column
How to Calculate the Mode of NumPy Array