Fisher-Yates shuffle in python

For a pet project I needed a array randomizer. I thought up an algorithm that I thought should work. It did, but funnily enough; I ended up re-discovering the Fisher-Yates shuffle. Here’s an implementation in Python.

import random
import math

def array_randomizer(arr):
	random.seed()
	index = len(arr) - 1
#	print "index is ", index
	while index > 0:
		rand = math.floor(random.random() * (index + 1))
		picked_element = int(rand)
		arr[index], arr[picked_element] = arr[picked_element], arr[index]
		index -= 1
	return arr
		
def analyze_array(template_arr, arr):
	ret = []
	for element in template_arr:
		v = arr.index(element)
		ret.append(v)
	return ret
		
def summarize(sum_array, val_array):
	for index in range(len(val_array)):
		sum_array[index] = val_array[index] + sum_array[index]

if __name__ == '__main__':
	a = ['a', 'b', 'c', 'd', 'e', 'f' ]
	sum_array = [0.0] * 6 # initialize array with zeros
	runs = 100000
	
 	for i in range(0,runs):	
		res_array = array_randomizer(a[:]) # copy array
#		print "random: ", res_array
		val_array = analyze_array(a, res_array)
		summarize(sum_array, val_array)

	print map( lambda x: x / runs, sum_array)
Advertisements

No comments yet

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: