python numpy scipy permutation shuffle

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