Shuffling a sequence of numbers have always been a useful utility, it is nothing but rearranging the elements in an array. Knowing more than one method to achieve this can always be a plus. Let’s discuss certain ways in which this can be achieved.
Using shuffle() method from numpy library
Here we are using the shuffle() method from numpy library to shuffle an array in Python.
Python3
# Import required module import numpy as np # Assign array arr = np.array([ 1 , 2 , 3 , 4 , 5 , 6 ]) # Display original array print ( "Original array: " , arr) # Shuffle array np.random.shuffle(arr) # Display shuffled array print ( "Shuffled array: " , arr) |
Output
Original array: [1 2 3 4 5 6] Shuffled array: [4 1 5 3 2 6]
Using shuffle() method from Random library to shuffle the given array.
Here we are using shuffle method from the built-in random module to shuffle the entire array at once.
Python3
# Import required module import random import array # Assign array arr = np.array([ 1 , 2 , 3 , 4 , 5 , 6 ]) # Display original array print ( "Original array: " , arr) # Shuffle array random.shuffle(arr) # Display shuffled array print ( "Shuffled array: " , arr) |
Output:
Original array: [1 2 3 4 5 6] Shuffled array: [4 5 2 6 1 3]
Using sample() method to shuffle an array
Here we are using the sample method from the random library to shuffle an array.
Python3
# Import required module import random import array # Assign array # here q indicates that the array # contains signed integer arr = array.array( 'q' , [ 1 , 2 , 3 , 4 , 5 , 6 ]) # Display original array print ( "Original array: " , arr) # Shuffle array # Here sample() returns a list, so we # are typecasting list into array arr = array.array( 'q' , random.sample( list (arr), 6 )) # Display shuffled array print ( "Shuffled array: " , arr) |
Output:
Original array: array('q', [1, 2, 3, 4, 5, 6]) Shuffled array: array('q', [6, 3, 2, 1, 5, 4])
Selecting random indices and swapping them
In this method we will select 2 indices randomly and then swap them. This process will be randomly repeated up to n/2 to n times, Where n is the length of array.
Python3
# Import required module import random import array # Create class to shuffle array class Shuffler( object ): # Constructor def __init__( self , arr): # Initializes the temp_array self .temp_array = arr # All the indices are stored in indices list self .indices = [index for index in range ( len (arr))] # method to shuffle array def shuffle( self ): # if length of array is zero empty array is returned. if not len ( self .temp_array): return [] # The below swapping process is # repeated randomly in range of # half of length of array to # length of the array, in this case, # it is repeated randomly in # between 3 to 6 times. for i in range (random.randint( int ( len ( self .temp_array) / 2 ), len ( self .temp_array))): # randomly choses two indices # that is i, j from indices list i = random.choice( self .indices) j = random.choice( self .indices) # swapping the elements present at i,j indices. self .temp_array[i], self .temp_array[j] = self .temp_array[j], self .temp_array[i] return self .temp_array # Driver code # Assign array arr = array.array( 'q' , [ 1 , 2 , 3 , 4 , 5 , 6 ]) # Create Object of Shuffler class ob = Shuffler(arr) # Display original array print ( "Original array: " , arr) # Shuffle method is called print ( "Shuffled array: " , ob.shuffle()) |
Output:
Original array: array('q', [1, 2, 3, 4, 5, 6]) Shuffled array: array('q', [1, 6, 3, 2, 4, 5])
Using Fisher-Yates Shuffle Algorithm to shuffle an array
This is the one of the most efficient methods, it is the Fisher–Yates shuffle Algorithm. Below program will help you understand this algorithm.
Python3
# Import required module import random import numpy as np # A function to generate a random # permutation of array def shuffler (arr, n): # We will Start from the last element # and swap one by one. for i in range (n - 1 , 0 , - 1 ): # Pick a random index from 0 to i j = random.randint( 0 ,i + 1 ) # Swap arr[i] with the element at random index arr[i],arr[j] = arr[j],arr[i] return arr # Driver code # Assign array arr = np.array([ 1 , 2 , 3 , 4 , 5 , 6 ]) # Display original array print ( "Original array: " ,arr) # Get length of array n = len (arr) # Use shuffler() function to get shuffled array print ( "Shuffled array: " ,shuffler(arr, n)) |
Output:
Original array: [1 2 3 4 5 6] Shuffled array: [6 1 2 3 4 5]
Selecting random indices and storing in a new list
In this method we will randomly select an index and append it to end of the array. this will be repeated for n time where n is length of array.
Python3
import random arr = [ 1 , 2 , 3 , 4 , 5 , 6 ] n = len (arr) - 1 for i in range (n): random_index = random.randint( 0 , n) temp = arr.pop(random_index) arr.append(temp) print (arr) |
Output:
[3, 5, 4, 6, 2, 1]