HOWTO · NumPy

numpy.random.permutation() Funktion in NumPy

Die Funktion numpy.random.permutation() gibt eine zufällig permutierte Kopie eines Arrays zurück, oder einen permutierten Bereich ganzer Zahlen, wenn eine ganze Zahl übergeben wird, und lässt die ursprünglichen Daten unverändert — im Gegensatz zu numpy.random.shuffle(), das das Array an seinem Platz mischt.

Auf dieser Seite

numpy.random.permutation() permutiert eine Sequenz zufällig oder gibt einen permutierten Bereich zurück. Übergeben Sie ein Array, und die Funktion gibt eine gemischte Kopie dieses Arrays zurück — das Original bleibt genau so, wie es war. Übergeben Sie eine ganze Zahl n, und die Funktion gibt die ganzen Zahlen von 0 bis n - 1 in zufälliger Reihenfolge zurück. Dieses Verhalten — kopieren statt verändern — ist der ganze Unterschied zu numpy.random.shuffle(), das ein Array an seinem Platz mischt.

Ein Array permutieren, ohne das Original zu verändern

Bei einem Array erzeugt permutation() ein neues Array, das dieselben Elemente in zufälliger Reihenfolge enthält:

import numpy as np

original_array = np.array([1, 2, 3, 4, 5])
shuffled_array = np.random.permutation(original_array)

print("Original Array:", original_array)
print("Shuffled Array:", shuffled_array)

Ausgabe:

Original Array: [1 2 3 4 5]
Shuffled Array: [3 1 5 2 4]

Die Reihenfolge in shuffled_array ist zufällig, so dass die obige Ausgabe ein mögliches Ergebnis ist, nicht das, was jeder Lauf erzeugt. Was sich nicht ändert, ist original_array: Es enthält weiterhin [1 2 3 4 5], und genau das macht permutation() zur richtigen Wahl, wenn die ursprüngliche Reihenfolge später noch wichtig ist — zum Beispiel, wenn ein Datensatz mit seinen Labels ausgerichtet bleiben muss.

Bei einer ganzen Zahl gibt permutation() einen permutierten Bereich zurück, was eine bequeme Möglichkeit ist, zufällige Indizes zu erhalten:

import numpy as np

n = 5
permuted_indices = np.random.permutation(n)

print("Permuted Indices:", permuted_indices)

Ausgabe:

Permuted Indices: [4 0 2 3 1]

Auch hier unterscheidet sich die genaue Reihenfolge von Lauf zu Lauf. Eine ganze Zahl zu übergeben ist gleichwertig dazu, den Bereich zuerst mit np.arange(n) zu erstellen und dieses Array zu permutieren.

permutation() und shuffle() vergleichen

Die beiden Funktionen unterscheiden sich darin, was sie zurückgeben und was sie mit Ihren Daten tun. permutation() gibt ein neues Array zurück und berührt seine Eingabe nie. numpy.random.shuffle() gibt nichts zurück und ordnet das Array selbst an seinem Platz neu:

import numpy as np

original_array = np.array([1, 2, 3, 4, 5])
np.random.shuffle(original_array)

print("Shuffled Original Array:", original_array)

Ausgabe:

Shuffled Original Array: [2 5 1 4 3]

Nach diesem Aufruf ist die ursprüngliche Reihenfolge verloren. Wählen Sie shuffle(), wenn Sie sie nicht brauchen und an Ort und Stelle neu ordnen möchten; wählen Sie permutation(), wenn das Original erhalten bleiben muss. Eine praktische Folge der Kopie: Bei einem großen Datensatz braucht permutation() Speicher für das zweite Array, also wägen Sie diesen Komfort gegen den zusätzlichen Speicher ab, wenn die Daten groß sind.