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 np
data = 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.0
print(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 np
import matplotlib.pyplot as plt
data = 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 np
import matplotlib.pyplot as plt
mu = 10.0
sigma = 2.0
data = np.random.randn(100000) * sigma + mu
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 normal distribution with python')
plt.grid()
plt.savefig("numpy_random_numbers_normal_distribution.png", bbox_inches='tight')
plt.show()