15 minutes de Python
La bibliothèque numpy.random : simulations de lois continues usuelles
Simulation de lois continues usuelles
Le module numpy.random permet de simuler directement des variables
aléatoires à densité suivant les lois usuelles, sans avoir à modéliser
explicitement l’expérience aléatoire correspondante.
Simulation d’une variable aléatoire de loi usuelle
On peut notamment simuler :
- une loi uniforme sur
[0,1[à l’aide derd.random, - une loi exponentielle à l’aide de
rd.exponential, - une loi normale à l’aide de
rd.normal, - une loi gamma à l’aide de
rd.gamma(option maths approfondies uniquement).
On rappelle ci-dessous les paramètres de chacune de ces fonctions.
-
rd.random()permet de simuler une variable aléatoire suivant la loi uniforme sur[0,1[. -
rd.exponential(a)permet de simuler une variable aléatoire suivant une loi exponentielle de paramètre \( \dfrac{1}{a} \). Le paramètreacorrespond donc à l’espérance de la variable aléatoire simulée. -
rd.normal(m,s)permet de simuler une variable aléatoire suivant une loi normale \( \mathcal{N}(m,s^2) \). Le paramètremest l’espérance etsl’écart-type. -
rd.gamma(a,1)permet de simuler une variable aléatoire suivant une loi gamma \( \gamma(a) \).
Dans chacun des cas précédents, la fonction renvoie une seule réalisation de la variable aléatoire considérée.
Par exemple, l’instruction
X = rd.normal(0,1)
renvoie une simulation d’une variable aléatoire suivant la loi normale centrée réduite.
De même, l’instruction
Y = rd.exponential(2)
renvoie une simulation d’une variable aléatoire suivant une loi exponentielle
d’espérance 2.
Simulation de plusieurs variables aléatoires indépendantes
Les fonctions de numpy.random permettent également de simuler plusieurs
réalisations indépendantes d’une même variable aléatoire en une seule
instruction. Pour cela, on ajoute un second paramètre indiquant le nombre de réalisations
souhaitées.
X = rd.loi(parametres, n)
où loi est à remplacer par l’une des lois précédentes
(random, exponential, normal, gamma) et
parametres par les paramètres adéquats.
La variable X est alors un tableau numpy contenant n réalisations
indépendantes de la variable aléatoire considérée.
On peut également demander une matrice contenant des réalisations indépendantes en fournissant un couple de dimensions :
X = rd.loi(parametres, [n,p])
Dans ce cas, X est une matrice de taille n × p dont les coefficients
sont des réalisations indépendantes de la même variable aléatoire.
X = rd.normal(0,1,1000)
La variable X est alors un tableau contenant 1000 réalisations
indépendantes d’une variable aléatoire suivant la loi normale centrée réduite.
Exemple
import numpy as np
import numpy.random as rd
N = 200000
X = rd.normal(0, 1, N)
Y=np.abs(X)
print(np.mean(Y <= 1.96))
Explication
Ce script simule N réalisations indépendantes d’une variable aléatoire
\( X \) suivant la loi normale centrée réduite \( \mathcal{N}(0,1) \), via
rd.normal(0, 1, N).
Y=np.abs(X) affecte alors à Y les valeurs prises par \( | X | \).
L'instruction Y <= 1.96 construit un tableau de booléens (les coefficients sont tous égaux à True ou False) indiquant,
pour chaque réalisation, si l’événement \( [ | X | \le 1.96] \) est réalisé.
La fonction np.mean(...) renvoie la moyenne de ces booléens (True compte comme 1 et False compte comme 0), donc la fréquence
de réalisation de l’événement. Elle fournit ainsi une estimation de
\( \mathbb{P}( | X | \le 1.96) \).
Trois commandes utiles aujourd’hui
Clique sur une carte pour voir l’instruction utile.
np.mean(A)
A.
np.std(A)
A.
np.prod(A)
Renvoie le produit des coefficients de A.
Un exercice pour vérifier ta maîtrise
On considère le script Python suivant.
- Compléter la ligne
X =pour queXreçoive une simulation deNvariables aléatoires indépendantes de loi uniforme sur[0,1[. - Compléter la ligne
Esp =pour queprint(Esp)affiche une estimation de l’espérance de \( \dfrac{1}{X+1} \). - Donner une approximation de la valeur affichée par
print(Prob).
import numpy.random as rd
import numpy as np
N = 10**3
X = rd.random(N)
Y = (X < 1/2)
Esp = np.mean(1/(X+1))
Prob = np.mean(Y)
print(Esp)
print(Prob)
Explication
-
Pour simuler
Nvariables aléatoires indépendantes suivant la loi uniforme sur[0,1[, on utiliserd.random(N). On complète donc :X = rd.random(N). -
On veut estimer l’espérance de \( \dfrac{1}{X+1} \). On calcule donc la moyenne des valeurs \( \dfrac{1}{X+1} \) sur l’échantillon simulé :
Esp = np.mean(1/(X+1)). -
La variable
Yest un tableau de booléens : pour tout entierktel que \( 0 \le k \le N-1 \), le coefficient numérokdeYvautTruesi et seulement si le coefficient numérokdeXvérifieX[k] < 1/2.La ligne
Prob = np.mean(Y)calcule la fréquence de l’événement \( \{X < \tfrac{1}{2}\} \), donc une estimation de \( \mathbb{P}(X < \tfrac{1}{2}) \).Or, si \( X \) suit la loi uniforme sur
[0,1[, on a \( \mathbb{P}(X < \tfrac{1}{2}) = \tfrac{1}{2} \). La valeur affichée parprint(Prob)est donc proche de0.5.
Et pour quelques minutes de plus…
Prendre en main la programmation, pas à pas.
Ces exercices sont conçus pour t’aider à maîtriser progressivement la programmation en Python, en partant de la lecture et de la compréhension du code, jusqu’à l’écriture autonome de scripts complets.
L’objectif n’est pas d’aller vite, mais de construire des automatismes solides, en comprenant ce que fait chaque instruction, puis en apprenant à les utiliser par toi-même.
L’ordre des exercices est volontaire : on lit, on comprend, on complète, puis on écrit seul. Prends le temps de chaque étape : c’est la clé pour progresser durablement.
Niveau 1 Analyser un code
Comprendre avant d’écrire.
Dans cette première série, tu observes et analyses des scripts Python déjà écrits.
L’objectif est de comprendre la logique du programme, le rôle des variables, des boucles
et des conditions, et d’être capable de prévoir ce que le code affiche ou calcule.
Niveau 2 Compléter un code
Écrire, mais avec un cadre.
Ici, tu passes à l’écriture sans partir de zéro.
Le squelette du programme est fourni : il te reste à compléter certaines instructions
pour que le code fonctionne correctement.
Ce format permet de se concentrer sur l’essentiel, sans se perdre dans la structure générale.
Niveau 3 Écrire un code complet
Passer à l’autonomie.
Dans cette dernière série, tu écris un programme complet à partir d’une consigne.
Tu dois organiser ton code, choisir les bonnes instructions et construire la logique globale du script.
C’est ici que tu mets en pratique tout ce que tu as appris dans les niveaux précédents.
Contenu réservé aux membres
Il faut être membre et connecté pour accéder aux exercices et aux corrigés.