rellenar - Mezclar una matriz con python, aleatorizar el orden de elementos de la matriz con python
matrices en python pdf (10)
¿Cuál es la forma más fácil de mezclar una matriz con python?
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.
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) )
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'']):
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
sklearn alternativa de hacer esto 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 la asignación. Y ''random_state'' puede controlar la mezcla de comportamientos reproducibles.
# 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]
import random
random.shuffle(array)
import random
random.shuffle(array)
sorted(array, key = lambda x: random.random())