Frage

Was ist der einfachste Weg, einen Array mit Python zu mischen?

War es hilfreich?

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

sortieren
sorted(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]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top