Mischte einen Array mit Python, randomisieren Array-Element, um mit Python
Frage
Was ist der einfachste Weg, einen Array mit Python zu mischen?
Lösung
import random
random.shuffle(array)
Andere Tipps
import random
random.shuffle(array)
Alternative Art und Weise, dies zu tun mit sklearn
from sklearn.utils import shuffle
X=[1,2,3]
y = ['one', 'two', 'three']
X, y = shuffle(X, y, random_state=0)
print(X)
print(y)
Ausgabe:
[2, 1, 3]
['two', 'one', 'three']
Vorteil: Sie können zufällig mehrere Arrays gleichzeitig ohne die Zuordnung zu stören. Und ‚random_state‘ das Schlurfen für reproduzierbares Verhalten steuern kann.
Die anderen Antworten sind die einfachste, aber es ist ein bisschen ärgerlich, dass die random.shuffle
Methode tatsächlich gibt nichts zurück - es sortiert nur die angegebene Liste. Wenn Sie an der Kette Anrufe wollen oder nur in der Lage sein, einen gemischt-Array in einer Zeile deklarieren Sie tun können:
import random
def my_shuffle(array):
random.shuffle(array)
return array
Dann können Sie tun Linien mögen:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
Wenn Sie mit regelmäßigen Python-Listen zu tun, random.shuffle()
wird die Arbeit ebenso wie die bisherigen Antworten zeigen.
Aber wenn es kommt ndarray
(numpy.array
), scheint random.shuffle
die ursprüngliche ndarray
zu brechen. Hier ein Beispiel:
import random
import numpy as np
import numpy.random
a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a
Verwenden Sie einfach: np.random.shuffle(a)
Wie random.shuffle
, np.random.shuffle
schlurft das Array an Ort und Stelle.
Für den Fall, Sie wollen ein neues Array können Sie sample
verwenden:
import random
new_array = random.sample( array, len(array) )
Sie können Ihren Array mit Zufallsschlüssel
sortierensorted(array, key = lambda x: random.random())
aber aussehen random.shuffle(array)
wird schneller sein, da es in C geschrieben
Zusätzlich zu den vorherigen Antworten, ich möchte eine andere Funktion einzuführen.
numpy.random.shuffle
sowie random.shuffle
führen in-place Schlurfen. Wenn Sie jedoch eine schlurfte Array numpy.random.permutation
zurückkehren wollen, ist die Funktion zu verwenden.
Ich weiß nicht, ich verwende random.shuffle()
aber es zurückgeben ‚Keine‘ zu mir, so ich schrieb dies, könnte hilfreich für jemanden
def shuffle(arr):
for n in range(len(arr) - 1):
rnd = random.randint(0, (len(arr) - 1))
val1 = arr[rnd]
val2 = arr[rnd - 1]
arr[rnd - 1] = val1
arr[rnd] = val2
return arr
# arr = numpy array to shuffle
def shuffle(arr):
a = numpy.arange(len(arr))
b = numpy.empty(1)
for i in range(len(arr)):
sel = numpy.random.random_integers(0, high=len(a)-1, size=1)
b = numpy.append(b, a[sel])
a = numpy.delete(a, sel)
b = b[1:].astype(int)
return arr[b]