Comment créer une matrice de nombres aléatoires avec numpy en python ?

Published: 04 octobre 2021

Tags: Python; Numpy; Random;

DMCA.com Protection Status

Il existe plusieurs solutions pour créer une matrice de nombres aléatoires en python. Voyons quelques exemples ici :

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.

How to generate random numbers from a normal (Gaussian) distribution in python ?
How to generate random numbers from a normal (Gaussian) distribution in python ?

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()

Références

Image

of