python - shuffle vs permute numpy
scipy permutation (2)
¿Cuál es la diferencia entre numpy.random.shuffle(x)
y numpy.random.permutation(x)
?
He leído las páginas de doc, pero no podía entender si había alguna diferencia entre las dos cuando solo quería mezclar aleatoriamente los elementos de una matriz.
Para ser más preciso, supongamos que tengo una matriz x=[1,4,2,8]
.
Si quiero generar permutaciones aleatorias de x, ¿cuál es la diferencia entre shuffle(x)
y permutation(x)
?
Agregando a lo que dijo @ecatmur, np.random.permutation
es útil cuando necesitas barajar pares ordenados, especialmente para la clasificación:
from np.random import permutation
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
# Data is currently unshuffled; we should shuffle
# each X[i] with its corresponding y[i]
perm = permutation(len(X))
X = X[perm]
y = y[perm]
np.random.permutation
tiene dos diferencias con np.random.shuffle
:
- si se pasa una matriz, devolverá una copia mezclada de la matriz;
np.random.shuffle
baraja la matriz en el lugar - si pasa un número entero, devolverá un rango
np.random.shuffle(np.arange(n))
es decir,np.random.shuffle(np.arange(n))
Si x es un número entero, permute al azar np.arange (x). Si x es una matriz, haga una copia y mezcle los elementos aleatoriamente.
El código fuente puede ayudar a entender esto:
3280 def permutation(self, object x):
...
3307 if isinstance(x, (int, np.integer)):
3308 arr = np.arange(x)
3309 else:
3310 arr = np.array(x)
3311 self.shuffle(arr)
3312 return arr