shuffle vs permute numpy

¿Cuál es la diferencia entre numpy.random.shuffle(x) y numpy.random.permutation(x) ?

He leído las páginas del documento pero no podía entender si había alguna diferencia entre las dos cuando solo quiero barajar aleatoriamente los elementos de una matriz.

Para ser más precisos, 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) ?

np.random.permutation tiene dos diferencias con np.random.shuffle :

  • si se pasa una matriz, devolverá una copia barajada de la matriz; np.random.shuffle baraja la matriz en su lugar
  • si se pasa un entero, devolverá un rango barajado, es decir, np.random.shuffle(np.arange(n))

Si x es un entero, permute aleatoriamente np.arange (x). Si x es una matriz, haz una copia y baraja los elementos al azar.

El código fuente podría 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 

Añadiendo 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]