95 votes

shuffle vs permute numpy

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

J'ai lu les pages de la documentation mais je n'ai pas pu comprendre s'il y avait une différence entre les deux lorsque je veux simplement mélanger de façon aléatoire 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) y permutation(x) ?

124voto

ecatmur Points 64173

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

  • s'il s'agit d'un tableau, il retournera un tableau mélangé. copie du tableau ; np.random.shuffle mélange le tableau sur place
  • si on lui passe un nombre entier, il retournera une gamme 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 façon aléatoire.

Le code source peut aider à comprendre cela :

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

35voto

hlin117 Points 5227

Ajoutant à ce que @ecatmur a dit, np.random.permutation est utile lorsque vous devez mélanger des paires ordonnées, notamment 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]

3voto

La méthode permutation() renvoie un tableau réorganisé (et laisse le tableau original inchangé), cette méthode conservera le tableau original intact et renverra un tableau mélangé, par exemple x = [1,4,2,8] est le tableau original et la méthode permutation renverra le tableau réorganisé (disons [8,4,1,2]).

D'un autre côté,

La méthode shuffle() apporte des modifications au tableau d'origine, par exemple x = [1,4,2,8] est le tableau d'origine et la méthode shuffle renvoie le tableau mélangé (disons que le tableau mélangé est [8,4,1,2]). Maintenant, le tableau original lui-même a été transformé en tableau mélangé, et il ne vous reste que le tableau mélangé.

Référence :- https://www.w3schools.com/python/numpy_random_permutation.asp

1voto

Mohanrac Points 65

En complément de @ecatmur, voici une brève explication. Pour commencer, j'ai créé un tableau de forme 3,3 avec des chiffres de 0 à 8.

import numpy as np
x1 = np.array(np.arange(0,9)).reshape(3,3) #array with shape 3,3 and have numbers from 0 to 8

#step1: using np.random.permutation
x_per = np.random.permutation(x1)
print('x_per:', x_per)
print('x_1:', x_1)
#Inference: x1 is not changed and x_per has its rows randomly changed

#The outcome will be 
x1: [[0 1 2]
     [3 4 5]
     [6 7 8]]
x_per:[[3 4 5]
       [0 1 2]
       [6 7 8]]
#Lets apply shuffling
x2 = np.array(range(9)).reshape(3,3)
x2_shuffle = np.random.shuffle(x2)
print('x2_shuffle:', x2_shuffle)
print('x2', x2)

#Outcome: 
x2_shuffle: None
x2 [[3 4 5]
    [0 1 2]
    [6 7 8]]

La déduction clé est : Lorsque x est un tableau, numpy.random.permutation(x) et numpy.random.shuffle(x) peuvent tous deux permuter les éléments de x de façon aléatoire le long du premier axe. le long du premier axe. numpy.random.permutation(x) retourne en fait une nouvelle variable et les données originales ne sont pas modifiées. Alors que numpy.random.shuffle(x) a changé les données originales et ne retourne pas une nouvelle variable. J'ai juste essayé de montrer avec un exemple afin qu'il puisse aider les autres. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X