Kurs
Das Modul random in NumPy umfasst Funktionen zur Erzeugung pseudozufälliger Zahlen. Zufällig bedeutet, dass sich etwas nicht logisch vorhersagen lässt.
np.random.seed()-Funktion
In diesem Beispiel simulierst du einen Münzwurf. Du verwendest die Funktion np.random(), die eine Zahl zwischen 0 und 1 zieht, wobei alle Zahlen in diesem Intervall gleich wahrscheinlich sind.
Ist die gezogene Zahl kleiner als 0,5 (mit einer Wahrscheinlichkeit von 50%), gilt das als Kopf, andernfalls als Zahl. Solche Experimente mit genau zwei möglichen Ausgängen (True = Kopf, False = Zahl) nennt man Bernoulli-Experimente.
Pseudorandom-Zahlen entstehen, indem man mit einer ganzen Zahl, dem Seed, startet und daraus eine Folge von Zahlen generiert. Derselbe Seed führt zur gleichen Zahlenfolge – daher „pseudo“. Wenn du reproduzierbaren Code möchtest, setze den Zufallszahlengenerator mit der Funktion np.random.seed() auf einen festen Seed.
Für die Münzwürfe importierst du NumPy, setzt den Seed und ziehst dann vier Zufallszahlen. Mit dem Keyword size gibst du an, wie viele Zufallszahlen du erzeugen willst.
import numpy as np
np.random.seed(42)
random_numbers = np.random.random(size=4)
random_numbers
array([0.3745012, 0.95071431, 0.73199394, 0.59865848])
Die erste Zahl ist kleiner als 0,5, also Kopf, während die übrigen drei Zahl sind. Das kannst du mit dem Kleiner-als-Vergleich explizit zeigen: Er liefert ein Array aus Booleschen Werten – True für Kopf, False für Zahl.
heads = random_numbers < 0.5
heads
array([True, False, False, False], dtype=bool)
Schließlich kannst du die Anzahl der Köpfe berechnen, indem du das Boolesche Array heads summierst. In numerischem Kontext behandelt Python True als Eins und False als Null.
np.sum(heads)
1
Vier zufällige Münzwürfe simulieren
Im nächsten Beispiel wollen wir wissen, wie groß die Wahrscheinlichkeit ist, viermal Kopf zu erhalten, wenn wir die vier Würfe immer wieder wiederholen. Das geht mit einer for-Schleife.
Wir initialisieren zunächst den Zähler mit Null. Dann führen wir 10.000 Vier-Wurf-Durchläufe aus. Ergibt ein Durchlauf viermal Kopf, erhöhen wir den Zähler.
Wie groß ist also die Wahrscheinlichkeit für viermal Kopf? Das ist die Anzahl der Durchläufe mit ausschließlich Kopf, geteilt durch die Gesamtzahl der Durchläufe. Das Ergebnis liegt bei etwa 0,06.
n_all_heads = 0
# Anzahl der Vier-Kopf-Durchläufe ermitteln
for _ in range(10000):
heads = np.random.random(size=4) < 0.5
n_heads = np.sum(heads)
if n_heads == 4:
n_all_heads += 1
n_all_heads / 10000
0.0621
Interaktives Beispiel zur Erzeugung zufälliger Zahlen
In diesem Beispiel erzeugen wir viele Zufallszahlen zwischen 0 und 1 und zeichnen anschließend ein Histogramm. Sind die Zahlen wirklich zufällig, sollten alle Balken im Histogramm (nahezu) gleich hoch sein.
Dafür musst du:
- Den Zufallszahlengenerator mit
np.random.seedund dem Seed42initialisieren. - Ein leeres Array
random_numbersmit 100.000 Einträgen zum Speichern derZufallszahlenanlegen. Verwende dazunp.empty(100000). - Mit einer
for-Schleife 100.000 Zufallszahlen übernp.random.random()ziehen und im Arrayrandom_numbersspeichern. Iteriere dazu überrange(100000). - Ein Histogramm von
random_numbersplotten. Beschriftungen der Achsen sind hier nicht nötig, da wir nur den Zufallszahlengenerator prüfen.
# Zufallszahlengenerator initialisieren
np.random.seed(42)
# Array für Zufallszahlen anlegen: random_numbers
random_numbers = np.empty(100000)
# Zufallszahlen erzeugen
for i in range(100000):
random_numbers[i] = np.random.random()
# Histogramm zeichnen
_ = plt.hist(random_numbers)
# Plot anzeigen
plt.show()
Beim Ausführen des Codes erhältst du folgendes Ergebnis:

Mehr zu Zufallszahlengeneratoren und Hacker-Statistik findest du in diesem Video aus unserem Kurs Statistical Thinking in Python (Part 1).
Dieser Inhalt stammt aus dem DataCamp-Kurs Statistical Thinking in Python (Part 1) von Justin Bois.

