L’aléatoire en python/numpy

Auteur·rice

Joseph Salmon, Tanguy Lefort

Objectifs de cette note
  • Comprendre au mieux comment utiliser les fonctions aléatoires (principalement les générateurs) en numpy.

Le module random de numpy permet d’utiliser l’aléatoire et des lois usuelles en Python. On crée d’abord un générateur qui nous permettra ensuite d’appeler les lois voulues comme suite:

import numpy as np  # package de calcul scientifique
import matplotlib.pyplot as plt  # package graphique

generateur = np.random.default_rng()
generateur.normal()
-0.3978808838216401

Question 1: Matrices aléatoires

Créer une matrice de taille 4\times 5 dont les entrées sont i.i.d de loi de Laplace d’espérance 0 et de variance 2. Lancer plusieurs fois le code et observez les changements. On pourra s’aider de l’aide en ligne si besoin.

generateur = np.random.default_rng()
M = ...  # XXX TODO
print(M)

Question 2: Reproduire des résultats

Pour reproduire des résultats ou débugger un code, il est utile de “figer” l’aléatoire. On utilise pour cela une graine (en: seed) dans la création du générateur. Fixez la graine à 0 dans default_rng() et lancez une génération aléatoire. Commenter.

rng = np.random.default_rng(0)
rng.normal()
rng2 = np.random.default_rng(...)
rng.normal()

Question 3: afficher un histogramme

Avec plt.subplot, créer 3 histogrammes de 100 tirages aléatoires de distributions suivantes:

  1. loi gaussienne (centrée-réduite)
  2. loi de Cauchy
  3. loi de Laplace.

On utilisera les mêmes paramètes de centrage et d’échelle pour les trois lois.

n_samples = 10000
X = np.empty([n_samples, 3])
X[:, 0] = ...
X[:, 1] = ...
X[:, 2] = ...

lois = ["Loi de Gauss", "Loi de Laplace", "Loi de Cauchy"]

fig_hist, ax = plt.subplots(3, 1, figsize=(3, 3))

for i, name in enumerate(lois):
    ax[i].hist(..., bins=100, density=True)
    ax[i].set_title(name)

plt.tight_layout()
plt.show()
Pour aller plus loin.

Toutes les lois usuelles disponibles sont dans la documentation et vous pourrez en manipuler avec des widgets ici