Wieso kommt immer das gleiche Array heraus?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Strawk
User
Beiträge: 233
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Hallo Nutzer!

Wenn bei Python im interaktiven Modus
import numpy as np
np.random.seed(0) eingebe, und dann
x1 = np.random.randint(10, size=6)
wieso kommt dann immer ein Array array([5, 0, 3, 3, 7, 9]) heraus? Das hat doch dann nichts mehr mit Zufall zu tun?

Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Strawk: Nein, das hat mit Pseudozufall zu tun. Warum bitte erwartest Du andere Ergebnisse wenn Du den `seed()` ja selbst explizit immer wieder auf einen festen Wert setzt? Das macht man doch genau dann wenn man zwar Zufallszahlen möchte, aber reproduzierbar jedes mal die gleichen.

Das hat auch nichts mit dem interaktiven Modus zu tun.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Strawk
User
Beiträge: 233
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Pseudozufall, okay. Ich habe auch nie begriffen, wie ein Computer das macht, Zufallszahlen zu generieren. Vielleicht gibt's da nen schönen Artikel zu?
Ich programmiere erfolglos, also bin ich nicht.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ich glaube das random Modul von Python benutzt diesen Generator:

https://de.wikipedia.org/wiki/Mersenne-Twister
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Wenn du die für dein System größtmögliche Zufälligkeit haben möchtest, dann verwende aus der Standardbibliothek das Modul secrets.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@/me: Nicht wirklich zwingend, oder? `random.SystemRandom` kann man auch ohne den Umweg über das `secrets`-Modul verwenden, und das ist dann nicht erst ab Python 3.6 zu haben, sondern schon seit 2.irgendwas. Und auch `secrets` kann nix machen wenn es kein `SystemRandom` gibt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@strawk: es gibt z.B. einen Wikipedia-Artikel zu Zufallsgeneratoren. Für's Verständnis hilft es IMHO, wenn man sich mit einem simplen (=schlechten) Zufallsgenerator mal beschäftigt, wie z.B. dem Linearer Kongruenzgenerator. Zu diesem gibt es auch einen Wikipediaartikel.
Wenn du beim diese Zufallsgenerator für den Faktor 3 einsetzt, für das Inkrement 9, für das Modul 16 und als Startwert 0 nimmst, bekommst du eine Zufallsfolge, die sich dummerweise nach wenigen Elementen schon wiederholt.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Die Methode seed verwendet man, wenn man deterministische Tests haben möchte.
Bei Unittests möchte man wenn möglich reproduzierbare Ergebnisse haben und mit Zufall geht das nicht.
Soweit ich weiß wird seed rein pseudozufällig initilisiert.
Gibt man den seed aber selbst an, hat man einen definierten Zustand. Dann kommen auch die gleichen Zufallszahlen, selbst wenn man den Interpreter neu startet.

Code: Alles auswählen

In [1]: import random                                                                                                                         

In [2]: random.seed(0)                                                                                                                        

In [3]: random.randrange(1,20)                                                                                                                
Out[3]: 13

In [4]: random.randrange(1,20)                                                                                                                
Out[4]: 14

In [5]: random.randrange(1,20)                                                                                                                
Out[5]: 2

In [6]: random.seed(0)                                                                                                                        

In [7]: random.randrange(1,20)                                                                                                                
Out[7]: 13

In [8]: random.randrange(1,20)                                                                                                                
Out[8]: 14

In [9]: random.randrange(1,20)                                                                                                                
Out[9]: 2

sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten