Comment générer toujours les mêmes nombres aléatoires avec numpy en python ?

Published: 21 septembre 2023

DMCA.com Protection Status

Numpy peut être utilisé pour générer des nombres aléatoires qui sont reproductibles. Cela est utile pour de nombreuses applications en science des données et en analyse statistique, où il est essentiel d'avoir des résultats cohérents sur plusieurs essais. Pour cela, un générateur de nombres pseudo-aléatoires (PRNG) doit être utilisé avec une valeur de graine ("seed" en anglais) fixe. Tous les calculs ultérieurs produiront le même résultat, tant que la même valeur de graine est utilisée. Exemples :

Avec numpy random.seed()

Utiliser numpy pour la génération de nombres pseudo-aléatoires (PRNG) implique deux étapes : tout d'abord, définir la valeur de la graine, puis générer des nombres aléatoires. La valeur de la graine peut être générée de différentes manières, par exemple en utilisant un entier généré de manière aléatoire ou en fournissant un entier défini par l'utilisateur. Pour définir la valeur de la graine, la méthode random.seed() de numpy doit être utilisée, en passant la valeur de la graine souhaitée en argument :

np.random.seed(42)

Notez que le nombre 42 est un choix populaire comme graine pour générer des nombres aléatoires, rendant hommage au roman emblématique de Douglas Adams, "Le Guide du voyageur galactique".

Une fois que le générateur de nombres aléatoires a été initialisé avec une valeur de graine spécifique, des nombres aléatoires peuvent être facilement créés à l'aide des méthodes numpy.random.rand() ou numpy.random.randn().
Exemples:

Exemples de générateurs de nombres aléatoires numpy.

Avec np.random.rand()

import numpy as np

np.random.seed(42)

np.random.rand()

sortie:

0.3745401188473625

Un autre exemple

import numpy as np

np.random.seed(42)

[ np.random.rand() for i in range(10)]

sortie:

[0.3745401188473625,
 0.9507143064099162,
 0.7319939418114051,
 0.5986584841970366,
 0.15601864044243652,
 0.15599452033620265,
 0.05808361216819946,
 0.8661761457749352,
 0.6011150117432088,
 0.7080725777960455]

Avec numpy random_sample()

Générons une matrice de nombres flottants aléatoires avec numpy en utilisant random_sample(:)

import numpy as np

np.random.seed(42)

n = 10

data = np.random.random_sample(n)

Cela générera toujours les mêmes nombres aléatoires.

[0.37454012 0.95071431 0.73199394 0.59865848 0.15601864 0.15599452
 0.05808361 0.86617615 0.60111501 0.70807258]

En utilisant une valeur de graine fixe, numpy peut générer des nombres pseudo-aléatoires reproductibles. Cela est utile pour de nombreuses applications de science des données et d'analyse statistique, car cela garantit que les mêmes résultats sont obtenus lors de plusieurs essais. De plus, cette approche facilite le débogage des erreurs ou des incohérences dans les résultats.

Références