Ich habe ein sehr großes 2D-Array, das ungefähr so aussieht:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Gibt es mit numpy eine einfache Möglichkeit, ein neues 2D-Array mit z. B. 2 zufälligen Zeilen aus dem ursprünglichen Array zu erhalten a
(ohne Ersatz)?
z.B
b=
[[a4, b4, c4],
[a99, b99, c99]]
Antworten:
Zusammenstellen für einen allgemeinen Fall:
Bei Nichtersatz (numpy 1.7.0+):
Ich glaube nicht, dass es eine gute Möglichkeit gibt, eine zufällige Liste ohne Ersatz vor 1.7 zu erstellen. Vielleicht können Sie eine kleine Definition einrichten, die sicherstellt, dass die beiden Werte nicht gleich sind.
quelle
np.random.choice
, und das heißtnp.random.permutation(A.shape[0])[:2]
, es ist eigentlich nicht großartig, abernp.random.choice
genau das ist es zu diesem Zeitpunkt ... oder wenn Sie Ihr Array nicht ändern möchten Platz,np.random.shuffle
Dies ist ein alter Beitrag, aber das funktioniert am besten für mich:
Ändern Sie das Ersetzen = Falsch in Wahr, um dasselbe zu erhalten, jedoch mit Ersetzen.
quelle
replace=False
unterzogen wurde, wird der hinzugefügte Parameter angezeigtchoice
.Eine andere Möglichkeit besteht darin, eine zufällige Maske zu erstellen, wenn Sie Ihre Daten nur um einen bestimmten Faktor reduzieren möchten. Angenommen, ich möchte auf 25% meines ursprünglichen Datensatzes, der sich derzeit im Array befindet, ein Downsampling durchführen
data_arr
:Jetzt können Sie
data_arr[mask]
~ 25% der Zeilen nach dem Zufallsprinzip aufrufen und zurückgeben.quelle
Dies ist eine ähnliche Antwort wie die von Hezi Rasheff, aber vereinfacht, damit neuere Python-Benutzer verstehen, was los ist (ich habe festgestellt, dass viele neue Studenten der Datenwissenschaft auf seltsamste Weise Zufallsstichproben abrufen, weil sie nicht wissen, was sie in Python tun).
Sie können eine Reihe von Zufallsindizes aus Ihrem Array abrufen, indem Sie Folgendes verwenden:
Sie können dann das Slicing mit Ihrem Numpy-Array verwenden, um die Samples an diesen Indizes zu erhalten:
Dadurch erhalten Sie die angegebene Anzahl von Zufallsstichproben aus Ihren Daten.
quelle
Wenn Sie die gleichen Zeilen, aber nur eine Zufallsstichprobe benötigen, dann
Hier muss x ein 'int' sein, das die Anzahl der Zeilen definiert, die Sie zufällig auswählen möchten.
quelle
old_array
es sich um eine Sequenz oder eine Menge handelt, nicht um ein numpy-Array [link] ( docs.python.org/3/library/random.html#functions-for-sequences )Ich sehe, dass eine Permutation vorgeschlagen wurde. In der Tat kann es in einer Zeile gemacht werden:
quelle
Wenn Sie mehrere zufällige Teilmengen von Zeilen generieren möchten, z. B. wenn Sie RANSAC ausführen.
quelle