Il existe plusieurs solutions pour créer une matrice de nombres aléatoires en python. Voyons quelques exemples ici :
Table des matières
- Créer une matrice d'entiers aléatoires
- Créer toujours les mêmes nombres aléatoires
- Créer une matrice de flottants aléatoires entre 0 et 1
- Créer une matrice de flottants aléatoires entre -1 et 1
- Créer une matrice de nombres aléatoires à partir d'une distribution normale standard
- Créer une matrice de nombres aléatoires à partir d'une distribution normale
- Références
Créer une matrice d'entiers aléatoires
Pour créer une matrice d'entiers aléatoires, une solution consiste à utiliser numpy.random.randint
import numpy as npdata = np.random.randint(-10,10,10)print(data)
donne
[-4 9 4 0 -3 -4 8 0 0 -7]
Un autre exemple avec une matrice de taille=(4,3)
data = np.random.randint(-10,10,size=(4,3))print(data)
donne
[[ -3 -8 -9][ 1 -5 -9][-10 1 1][ 6 -1 5]]
Créer toujours les mêmes nombres aléatoires
Remarque : pour rendre votre travail reproductible, il est parfois important de pouvoir générer les mêmes nombres aléatoires. Pour ce faire une solution consistant à utilisernumpy.random.seed:
np.random.seed(seed=42)
vous pouvez choisir n'importe quel numéro (Il est courant d'utiliser 42 en référence au livre: "The Hitchhiker's Guide to the Galaxy (guide du voyageur galactique)")
alors
data = np.random.randint(-10,10,10)print(data)
donnera toujours les mêmes nombres aléatoires :
[-4 9 4 0 -3 -4 8 0 0 -7]
Créer une matrice de flottants aléatoires entre 0 et 1
Pour créer une matrice de flottants aléatoires entre 0 et 1, une solution consiste à utiliser numpy.random.rand
data = np.random.rand(4,3)print(data)
donne
[[0.23277134 0.09060643 0.61838601][0.38246199 0.98323089 0.46676289][0.85994041 0.68030754 0.45049925][0.01326496 0.94220176 0.56328822]]
Remarque : pour générer par exemple des flottants aléatoires entre 0 et 100 il suffit de multiplier la matrice par 100 :
data = np.random.rand(4,3) * 100.0print(data)
donne par exemple
[[38.54165025 1.59662522 23.08938256][24.1025466 68.32635188 60.99966578][83.31949117 17.33646535 39.10606076][18.22360878 75.53614103 42.51558745]]
Créer une matrice de flottants aléatoires entre -1 et 1
Pour créer une matrice de flottants aléatoires négatifs et positifs, une solution consiste à utiliser numpy.random.uniform
data = np.random.uniform(-1,1, size=(6,2))print(data)
donne
[[-0.58411667 0.13540066][-0.93737342 0.68456955][-0.10049173 -0.20969953][ 0.85331773 0.45454399][-0.34691846 0.14088795][ 0.04166852 0.92234405]]
Remarque : peut également être utilisé pour générer des nombres aléatoires, par exemple [-10,5] :
data = np.random.uniform(-10,5, size=(4,3))print(data)
donne
[[ 2.66800773 1.20980165 -1.90461801][-1.19873252 4.47882961 -0.89448628][-5.86001227 -5.55589741 -7.52099591][-9.7654539 -3.64897779 -4.07677723]]
Créer une matrice de nombres aléatoires à partir d'une distribution normale standard
Pour générer des nombres aléatoires à partir d'une distribution normale standard ($\mu_0=0$ , $\sigma=1$)
[image:numpy-random-numbers-stantard-normal-distribution size:50 caption:
Comment générer des nombres aléatoires à partir d'une distribution normale (gaussienne) en python ?]
import numpy as npimport matplotlib.pyplot as pltdata = np.random.randn(100000)hx, hy, _ = plt.hist(data, bins=50, normed=1,color="lightblue")plt.ylim(0.0,max(hx)+0.05)plt.title('Generate random numbers \n from a standard normal distribution with python')plt.grid()plt.savefig("numpy_random_numbers_stantard_normal_distribution.png", bbox_inches='tight')plt.show()
Créer une matrice de nombres aléatoires à partir d'une distribution normale
Si nous savons comment générer des nombres aléatoires à partir d'une distribution normale standard, il est possible de générer des nombres aléatoires à partir de n'importe quelle distribution normale avec la formule $$X = Z * \sigma + \mu$$ où Z est des nombres aléatoires à partir d'une normale standard distribution, $\sigma$ l'écart type $\mu$ la moyenne.

import numpy as npimport matplotlib.pyplot as pltmu = 10.0sigma = 2.0data = np.random.randn(100000) * sigma + muhx, hy, _ = plt.hist(data, bins=50, normed=1,color="lightblue")plt.ylim(0.0,max(hx)+0.05)plt.title('Generate random numbers \n from a normal distribution with python')plt.grid()plt.savefig("numpy_random_numbers_normal_distribution.png", bbox_inches='tight')plt.show()
