it-swarm.com.de

Mischen Sie ein Array mit Python, ordnen Sie die Reihenfolge der Arrayelemente mit Python zufällig an

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

216
davethegr8
import random
random.shuffle(array)
397
David Z
import random
random.shuffle(array)
105
Douglas Leeder

Alternative Möglichkeit, dies mit sklearn zu tun

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 mehrere Arrays gleichzeitig zufällig auswählen, ohne das Mapping zu unterbrechen. 'Random_state' kann das Mischen für reproduzierbares Verhalten steuern.

22
Qy Zuo

Die anderen Antworten sind die einfachsten, allerdings ist es etwas ärgerlich, dass die random.shuffle-Methode tatsächlich nichts zurückgibt. Wenn Sie Anrufe verketten möchten oder nur ein gemischtes Array in einer Zeile deklarieren können, können Sie Folgendes tun:

    import random
    def my_shuffle(array):
        random.shuffle(array)
        return array

Dann können Sie Zeilen wie:

    for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
21
Mark Rhodes

Wenn Sie mit regulären Python-Listen arbeiten, erledigt random.shuffle() die Arbeit genau so wie in den vorherigen Antworten.

Wenn es jedoch um ndarray (numpy.array) geht, scheint random.shuffle die ursprüngliche ndarray zu beschädigen. Hier ist 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 mischt np.random.shuffle das Array an Ort und Stelle.

11
Shuai Zhang

Für den Fall, dass Sie ein neues Array wünschen, können Sie sample verwenden:

import random
new_array = random.sample( array, len(array) )
5
Charlie Parker

Sie können Ihr Array mit einem zufälligen Schlüssel sortieren

sorted(array, key = lambda x: random.random())

aber wie es aussieht, wird random.shuffle(array) schneller sein, seit es in C geschrieben ist

2
Trinh Hoang Nhu

Neben den vorherigen Antworten möchte ich noch eine weitere Funktion einführen.

numpy.random.shuffle sowie random.shuffle führen In-Place-Mischen durch. Wenn Sie jedoch ein gemischtes Array zurückgeben möchten, ist numpy.random.permutation die zu verwendende Funktion.

1
Saber
# 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]
0
sudeep

Ich weiß nicht, dass ich random.shuffle() verwendet habe, aber es gibt 'None' für mich zurück, also habe ich dies geschrieben, könnte jemandem helfen

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
0
Jeeva