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

He leído el doc páginas, pero yo no podía entender si había alguna diferencia entre los dos cuando sólo quiero de forma aleatoria reproducción aleatoria de los elementos de una matriz.

Para ser más precisos, supongamos que tengo una matriz x=[1,4,2,8].

Si quiero generar al azar permutaciones de x, entonces ¿cuál es la diferencia entre shuffle(x) y permutation(x)?

InformationsquelleAutor DotPi | 2013-03-18

2 Comentarios

  1. 79

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

    • si se pasa una matriz, devuelve una baraja copia de la matriz; np.random.shuffle baraja la matriz directamente
    • si pasa un entero, devuelve una baraja rango decir np.random.shuffle(np.arange(n))

    Si x es un entero al azar permutar np.arange(x). Si x es una matriz, hacer una copia y reproducción aleatoria de los elementos al azar.

    El código fuente podría ayudar a comprender 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
    • Cuando se utiliza en un panda.Index, sólo permutation obras y shuffle no. ¿Cómo funciona este caso encaja en su explicación?
    • coacciona a su argumento en un ndarray (copiando); pandas.Index es lo suficientemente diferente de un ndarray que shuffle no trabajar en ella, pero va a trabajar en un ndarray crea a partir de ella.
  2. 22

    Añadiendo a lo que @ecatmur dijo, np.random.permutation es útil cuando se necesita para mezclar los 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]
    • Sigo recibiendo este: TypeError: entero de sólo escalar de matrices se puede convertir en un escalar índice
    • Para aclarar @hlin117, esto sólo funciona si x e y son arrays de numpy. Si tratas de hacerlo con pitones incorporado en las listas lanzará el TypeError.

Dejar respuesta

Please enter your comment!
Please enter your name here