Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? RAG (Retrieval-Augmented Generation)
et Fine Tuning d'un LLM
Voir le programme détaillé

Génération aléatoire moderne avec NumPy

Valeurs manquantes et spéciales Algèbre linéaire avec NumPy


Accès rapide :
Introduction
Créer un générateur
Rendre les tirages reproductibles
Générer des flottants uniformes
Utiliser une distribution normale
Tirer des valeurs dans une collection
Mélanger des valeurs
Ancienne API et API moderne

Introduction

NumPy propose une API moderne pour générer des nombres aléatoires. Elle repose sur l'objet Generator, obtenu avec np.random.default_rng(). Cette API est préférable à l'ancienne utilisation directe de np.random, car elle isole mieux l'état du générateur.

Créer un générateur

Un générateur permet de produire des valeurs aléatoires. Dans un document pédagogique, il est utile de fournir une graine afin que les résultats soient reproductibles.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

rng = np.random.default_rng(1234)
dice = rng.integers(1, 7, size=10)

print(dice)
Simulation de dix lancers de dé

[6 6 6 3 2 6 1 2 1 2]

La borne haute passée à integers est exclusive. Pour simuler un dé à six faces, on demande donc des entiers entre 1 inclus et 7 exclu.

Rendre les tirages reproductibles

Deux générateurs initialisés avec la même graine produisent la même séquence de valeurs. C'est très utile pour documenter un calcul ou déboguer une simulation.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

rng1 = np.random.default_rng(42)
rng2 = np.random.default_rng(42)

print(rng1.integers(0, 10, 5))
print(rng2.integers(0, 10, 5))
Deux générateurs avec la même graine

[0 7 6 4 4]
[0 7 6 4 4]

Générer des flottants uniformes

La méthode random produit des flottants dans l'intervalle [0, 1[.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

rng = np.random.default_rng(1234)
values = rng.random((2, 3))

print(np.round(values, 3))
Tableau de flottants aléatoires

[[0.977 0.38  0.923]
 [0.262 0.319 0.118]]

Utiliser une distribution normale

La méthode normal permet de générer des valeurs autour d'une moyenne, avec un écart type donné.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

rng = np.random.default_rng(1234)
values = rng.normal(loc=100, scale=15, size=5)

print(np.round(values, 1))
Génération selon une loi normale

[ 75.9 101.  111.1 102.3 113. ]

Tirer des valeurs dans une collection

La méthode choice permet de choisir des valeurs dans un tableau. On peut autoriser ou non les répétitions avec l'argument replace.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

rng = np.random.default_rng(1234)
values = np.array(["Alice", "Bruno", "Chloe", "Diane"])

print(rng.choice(values, size=3, replace=False))
Tirage sans remise

['Diane' 'Bruno' 'Chloe']

Mélanger des valeurs

La méthode shuffle mélange un tableau en place. Si vous voulez conserver le tableau initial, utilisez plutôt permutation.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

rng = np.random.default_rng(1234)
data = np.arange(1, 6)

rng.shuffle(data)
print(data)
Mélange en place avec shuffle

[1 5 2 4 3]

Ancienne API et API moderne

Vous rencontrerez encore beaucoup de code utilisant np.random.randint ou np.random.randn. Ce code fonctionne toujours, mais pour un nouveau programme il est préférable de créer explicitement un générateur avec default_rng.

Valeurs manquantes et spéciales Algèbre linéaire avec NumPy




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation Python
Les fondamentaux
Voir le programme détaillé