Was ist der Unterschied zwischen numpy.random.shuffle(x)
und numpy.random.permutation(x)
?
Ich habe die Dokumentseiten gelesen, konnte aber nicht verstehen, ob es einen Unterschied zwischen den beiden gab, wenn ich nur die Elemente eines Arrays zufällig mischen möchte.
Genauer gesagt, ich habe ein Array x=[1,4,2,8]
.
Wenn ich zufällige Permutationen von x erzeugen möchte, was ist dann der Unterschied zwischen shuffle(x)
und permutation(x)
?
panda.Index
nurpermutation
undshuffle
funktioniert nicht. Wie passt dieser Fall in Ihre Erklärung?permutation
zwingt seine Argumentation in ein ndarray (durch Kopieren);pandas.Index
unterscheidet sich ausreichend von einem ndarray,shuffle
das nicht daran arbeitet, aber an einem daraus erstellten ndarray.Das Hinzufügen zu dem, was @ecatmur gesagt hat,
np.random.permutation
ist nützlich, wenn Sie geordnete Paare mischen müssen, insbesondere für die Klassifizierung: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]
quelle
Hier ist eine kurze Erklärung, die @ecatmur hinzufügt. Zunächst habe ich ein Array erstellt, das die Form 3,3 hat und Zahlen von 0 bis 8 hat
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]]
Die wichtigste Schlussfolgerung ist: Wenn x ein Array ist, können sowohl numpy.random.permutation (x) als auch numpy.random.shuffle (x) die Elemente in x zufällig entlang der ersten Achse permutieren. numpy.random.permutation (x) gibt tatsächlich eine neue Variable zurück und die ursprünglichen Daten werden nicht geändert. Wobei numpy.random.shuffle (x) die Originaldaten geändert hat und keine neue Variable zurückgibt. Ich habe nur versucht, mit einem Beispiel zu zeigen, damit es anderen helfen kann. Vielen Dank!!
quelle
Die permutation () -Methode gibt ein neu angeordnetes Array zurück (und lässt das ursprüngliche Array unverändert). Diese Methode behält das ursprüngliche Array bei und gibt ein gemischtes Array zurück, z. B. x = [1,4,2,8]. ist das ursprüngliche Array und die Permutationsmethode gibt das neu angeordnete Array zurück (sagen wir [8,4,1,2]). Jetzt haben Sie zwei Arrays, das ursprüngliche Array und das neu angeordnete Array.
In der anderen Hand,
Die shuffle () -Methode nimmt Änderungen am ursprünglichen Array vor, z. B. x = [1,4,2,8] ist das ursprüngliche Array, und die shuffle-Methode gibt das gemischte Array zurück (sagen wir, das gemischte Array ist [8,4,1] , 2]). Jetzt wurde das ursprüngliche Array selbst in das gemischte Array geändert, und Sie haben nur noch das gemischte Array.
Referenz: - https://www.w3schools.com/python/numpy_random_permutation.asp
quelle