Numpy roll() Function



The Numpy roll() function is used to shift the elements of an array along a specified axis. The elements that roll beyond the last position are re-introduced at the first. This function is particularly useful for cyclically shifting elements, such as moving the last elements of an array to the front or shifting elements in a circular fashion.

The function works by rolling the elements along the specified axis, with the values that go beyond the array's bounds being wrapped around to the other side and the axis can be specified with both positive and negative values. It can be applied to arrays of any dimension.

Syntax

Following is the syntax of the Numpy roll() function −

numpy.roll(m, shift, axis=None)  

Parameters

Following are the parameters of the Numpy roll() function −

  • m: The input array whose elements are to be shifted.
  • shift: The number of positions by which the array elements are to be shifted. A positive value shifts the elements to the right, while a negative value shifts them to the left.
  • axis (optional): Axis or axes along which the array is shifted. If not specified, the array is flattened before shifting, and then reshaped back to its original shape.

Return Type

This function returns a view of the input array with its elements shifted along the specified axis. The original array remains unchanged.

Example

Following is a basic example of shifting the elements of a 1D array using the Numpy roll() function −

import numpy as np  
my_array = np.array([10, 20, 30, 40, 50])  
print("Original Array:", my_array)  
result = np.roll(my_array, 2)  
print("Array after shifting right by 2 positions:", result)  

Output

Following is the output of the above code −

Original Array: [10 20 30 40 50]  
Array after shifting right by 2 positions: [40 50 10 20 30]  

Example: Shifting Along a Specific Axis

The roll() function can also shift elements along a specific axis in multi-dimensional arrays. In the following example, we shift the elements of a 2D array along axis 0 (rows) by 1 position −

import numpy as np  
my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  
print("Original Array:\n", my_array)  
result = np.roll(my_array, 1, axis=0)  
print("Array after shifting rows by 1 position:\n", result)  

Output

Following is the output of the above code −

Original Array:  
 [[1 2 3]  
  [4 5 6]  
  [7 8 9]]  
Array after shifting rows by 1 position:  
 [[7 8 9]  
  [1 2 3]  
  [4 5 6]]  

Example: Negative Shifting

We can also shift elements in the opposite direction by using a negative value for the shift parameter. Here, we have shifted the elements of a 2D array along axis 1 (columns) by -1 position −

import numpy as np  
my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])  
print("Original Array:\n", my_array)  
result = np.roll(my_array, -1, axis=1)  
print("Array after shifting columns by -1 position:\n", result)  

Output

Following is the output of the above code −

Original Array:  
 [[1 2 3]  
  [4 5 6]  
  [7 8 9]]  
Array after shifting columns by -1 position:  
 [[2 3 1]  
  [5 6 4]  
  [8 9 7]]  

Example: Shifting a 3D Array

The roll() function can also be applied to multi-dimensional arrays. Here, we have shifted the elements of a 3D array along axis 2 (depth) by 1 position −

import numpy as np  
my_array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])  
print("Original Array:\n", my_array)  
result = np.roll(my_array, 1, axis=2)  
print("3D Array after shifting along depth axis:\n", result)  

Output

Following is the output of the above code −

Original Array:  
 [[[1 2]  
   [3 4]]  

  [[5 6]  
   [7 8]]]  
3D Array after shifting along depth axis:  
 [[[2 1]  
   [4 3]]  

  [[6 5]  
   [8 7]]]  

Example: 1D Array with No Axis Specified

If the axis is not specified, the array is flattened, and the shift is performed on the flattened array. In the following example, we have shifted a 1D array by 2 positions towards rignt −

import numpy as np  
my_array = np.array([10, 20, 30, 40, 50])  
print("Original Array:", my_array)  
result = np.roll(my_array, 2)  
print("Array after shifting right by 2 positions:", result)  

Output

Following is the output of the above code −

Original Array: [10 20 30 40 50]  
Array after shifting right by 2 positions: [40 50 10 20 30]  
numpy_array_manipulation.htm
Advertisements