Mezclar una matriz con python, aleatorizar el orden de elementos de la matriz con python

¿Cuál es la forma más fácil de mezclar una matriz con python?

 import random random.shuffle(array) 
 import random random.shuffle(array) 

Una forma alternativa de hacerlo usando sklearn.

 from sklearn.utils import shuffle X=[1,2,3] y = ['one', 'two', 'three'] X, y = shuffle(X, y, random_state=0) print(X) print(y) 

Salida:

 [2, 1, 3] ['two', 'one', 'three'] 

Ventaja: puede aleatorizar múltiples matrices simultáneamente sin interrumpir el mapeo. Y ‘random_state’ puede controlar la mezcla de comportamientos reproducibles.

Las otras respuestas son las más fáciles, sin embargo, es un poco molesto que el método random.shuffle no devuelva nada en realidad, simplemente ordena la lista dada. Si desea encadenar llamadas o simplemente poder declarar una matriz aleatoria en una línea, puede hacerlo:

  import random def my_shuffle(array): random.shuffle(array) return array 

Entonces puedes hacer líneas como:

  for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']): 

Al tratar con las listas de Python normales, random.shuffle() hará el trabajo tal como se muestra en las respuestas anteriores.

Pero cuando se ndarray de ndarray ( numpy.array ), random.shuffle parece romper el ndarray original. Aquí hay un ejemplo:

 import random import numpy as np import numpy.random a = np.array([1,2,3,4,5,6]) a.shape = (3,2) print a random.shuffle(a) # a will definitely be destroyed print a 

Solo use: np.random.shuffle(a)

Al igual que random.shuffle , np.random.shuffle baraja la matriz en el lugar.

En caso de que desee una nueva matriz, puede utilizar la sample :

 import random new_array = random.sample( array, len(array) ) 

Puede ordenar su matriz con clave aleatoria

 sorted(array, key = lambda x: random.random()) 

pero parece que random.shuffle(array) será más rápido ya que está escrito en C

Además de las respuestas anteriores, me gustaría introducir otra función.

numpy.random.shuffle , así como random.shuffle realiza un barajado in situ. Sin embargo, si desea devolver una matriz numpy.random.permutation es la función que debe utilizar.

No sé si usé random.shuffle() pero me devolvió ‘Ninguno’, así que escribí esto, podría ser útil para alguien

 def shuffle(arr): for n in range(len(arr) - 1): rnd = random.randint(0, (len(arr) - 1)) val1 = arr[rnd] val2 = arr[rnd - 1] arr[rnd - 1] = val1 arr[rnd] = val2 return arr 
 # arr = numpy array to shuffle def shuffle(arr): a = numpy.arange(len(arr)) b = numpy.empty(1) for i in range(len(arr)): sel = numpy.random.random_integers(0, high=len(a)-1, size=1) b = numpy.append(b, a[sel]) a = numpy.delete(a, sel) b = b[1:].astype(int) return arr[b]