web-dev-qa-db-fra.com

shuffle vs permute numpy

Quelle est la différence entre numpy.random.shuffle(x) et numpy.random.permutation(x)?

J'ai lu les pages de doc mais je ne pouvais pas comprendre s'il y avait une différence entre les deux quand je veux juste mélanger au hasard les éléments d'un tableau.

Pour être plus précis, supposons que j'ai un tableau x=[1,4,2,8].

Si je veux générer des permutations aléatoires de x, alors quelle est la différence entre shuffle(x) et permutation(x)?

61
DotPi

np.random.permutation Présente deux différences par rapport à np.random.shuffle:

  • si passé un tableau, il retournera un copie mélangé du tableau; np.random.shuffle Mélange la baie en place
  • si passé un entier, il retournera une plage mélangée, c'est-à-dire np.random.shuffle(np.arange(n))

Si x est un entier, permutez aléatoirement np.arange (x). Si x est un tableau, faites une copie et mélangez les éléments de manière aléatoire.

Le code source pourrait aider à comprendre ceci:

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
79
ecatmur

Pour ajouter à ce que @ecatmur a dit, np.random.permutation est utile lorsque vous devez mélanger des paires ordonnées, en particulier pour la classification:

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]
22
hlin117