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
Wieso kommt immer das gleiche Array heraus?
- __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.
Das hat auch nichts mit dem interaktiven Modus zu tun.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- 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.
Ich glaube das random Modul von Python benutzt diesen Generator:
https://de.wikipedia.org/wiki/Mersenne-Twister
https://de.wikipedia.org/wiki/Mersenne-Twister
- __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
- 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
@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
- 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.
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