webentwicklung-frage-antwort-db.com.de

Erstellen Sie konsistent dasselbe zufällige numpy-Array

Ich warte darauf, dass ein anderer Entwickler einen Code fertigstellt, der ein np-Array (100,2000) mit den Werten -1,0 oder 1 zurückgibt.

In der Zwischenzeit möchte ich zufällig ein Array mit denselben Eigenschaften erstellen, um einen Vorsprung bei der Entwicklung und beim Testen zu erhalten. Die Sache ist, dass ich will, dass dieses zufällig erstellte Array jedes Mal das gleiche ist, sodass ich nicht mit einem Array teste, das seinen Wert jedes Mal ändert, wenn ich meinen Prozess erneut ausführe.

Ich kann mein Array so erstellen, aber es gibt eine Möglichkeit, es so zu erstellen, dass es jedes Mal gleich ist. Ich kann das Objekt herausnehmen und es entfernen, aber ich frage mich, ob es einen anderen Weg gibt.

r = np.random.randint(3, size=(100, 2000)) - 1
78
Idr

Keimen Sie einfach den Zufallszahlengenerator mit einem festen Wert, z.

numpy.random.seed(42)

Auf diese Weise erhalten Sie immer die gleiche Zufallszahlenfolge.

78
Sven Marnach

Erstellen Sie Ihre eigene Instanz von numpy.random.RandomState() mit Ihrem ausgewählten Samen. Verwenden Sie numpy.random.seed() nur, um unflexible Bibliotheken zu umgehen, bei denen Sie nicht um Ihre eigene RandomState-Instanz herumgehen.

[~]
|1> from numpy.random import RandomState

[~]
|2> prng = RandomState(1234567890)

[~]
|3> prng.randint(-1, 2, size=10)
array([ 1,  1, -1,  0,  0, -1,  1,  0, -1, -1])

[~]
|4> prng2 = RandomState(1234567890)

[~]
|5> prng2.randint(-1, 2, size=10)
array([ 1,  1, -1,  0,  0, -1,  1,  0, -1, -1])
160
Robert Kern

Wenn Sie andere Funktionen verwenden, die auf einem zufälligen Status basieren, können Sie nicht einfach einen Gesamt-Startwert festlegen und stattdessen eine Funktion erstellen, um Ihre zufällige Liste von Zahlen zu erstellen und den Startwert als Parameter der Funktion festzulegen. Dies stört keine anderen Zufallsgeneratoren im Code: 

# Random states
def get_states(random_state, low, high, size):
    rs = np.random.RandomState(random_state)
    states = rs.randint(low=low, high=high, size=size)
    return states

# Call function
states = get_states(random_state=42, low=2, high=28347, size=25)
3
mari756h

Es ist wichtig zu verstehen, was der Samen eines Zufallsgenerators ist und wann/wie er in Ihrem Code festgelegt ist (siehe beispielsweise hier für eine gute Erklärung der mathematischen Bedeutung des Samens).

Dazu müssen Sie den Samen setzen, indem Sie Folgendes tun:

random_state = np.random.RandomState(seed=your_favorite_seed_value)

Es ist wichtig, die Zufallszahlen aus random_state und nicht aus np.random zu generieren. Das heißt du solltest tun:

random_state.randint(...)

anstatt 

np.random.randint(...) 

dadurch wird eine neue Instanz von RandomState () erstellt und die interne Uhr des Computers verwendet, um den Startwert festzulegen.

0
t_sic