Seite 1 von 1
Wieso kommt immer das gleiche Array heraus?
Verfasst: Freitag 14. Juni 2019, 09:51
von Strawk
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
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Freitag 14. Juni 2019, 10:00
von __blackjack__
@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.
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Freitag 14. Juni 2019, 10:27
von Strawk
Pseudozufall, okay. Ich habe auch nie begriffen, wie ein Computer das macht, Zufallszahlen zu generieren. Vielleicht gibt's da nen schönen Artikel zu?
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Freitag 14. Juni 2019, 10:49
von Jankie
Ich glaube das random Modul von Python benutzt diesen Generator:
https://de.wikipedia.org/wiki/Mersenne-Twister
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Freitag 14. Juni 2019, 11:37
von /me
Wenn du die für dein System größtmögliche Zufälligkeit haben möchtest, dann verwende aus der Standardbibliothek das Modul
secrets.
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Freitag 14. Juni 2019, 11:55
von __blackjack__
@/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.
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Sonntag 16. Juni 2019, 11:22
von noisefloor
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
Re: Wieso kommt immer das gleiche Array heraus?
Verfasst: Sonntag 16. Juni 2019, 15:01
von DeaD_EyE
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