np.random.default_rng() în NumPy

Numere aleatorii NumPy 1.17+

Creează un generator de numere aleatorii (Generator); cu un seed fix obții aceleași numere la fiecare rulare.

Sintaxă
rng = np.random.default_rng(seed=None)
rng.integers(low, high=None, size=None, endpoint=False)
rng.random(size=None)
rng.normal(loc=0.0, scale=1.0, size=None)
rng.uniform(low=0.0, high=1.0, size=None)

Ce face np.random.default_rng()

np.random.default_rng() creează un obiect Generator, din care ceri numere aleatorii prin metode: integers() pentru întregi, random() pentru numere între 0 și 1, normal() pentru distribuția normală și uniform() pentru numere distribuite uniform într-un interval.

Dacă dai un seed (un număr întreg), generatorul produce aceeași secvență la fiecare rulare: rezultatele se pot reproduce, de exemplu în teste sau în exemple de curs. Fără seed, numerele diferă de la o rulare la alta.

Funcțiile vechi (np.random.seed(), np.random.randint(), np.random.rand()) folosesc o stare globală comună pentru tot programul; orice altă bibliotecă care le apelează schimbă secvența ta. Documentația NumPy recomandă pentru cod nou un generator propriu creat cu default_rng.

Parametri

Parametru Descriere
seed Un întreg pentru rezultate reproductibile; None = la fiecare rulare altă secvență.
low, high La integers: intervalul, cu high exclus (inclus cu endpoint=True). La uniform: capetele intervalului.
size Câte valori (un întreg) sau forma tabloului (un tuplu).
loc, scale La normal: media și abaterea standard.

Ce returnează

default_rng: un obiect numpy.random.Generator. Metodele: un număr sau un tablou de forma size.

Exemple

Exemplul 1: Același seed, aceleași numere

import numpy as np

rng1 = np.random.default_rng(42)
rng2 = np.random.default_rng(42)
print(rng1.integers(1, 7, size=5))
print(rng2.integers(1, 7, size=5))

Rezultat

[1 5 4 3 3]
[1 5 4 3 3]

Exemplul 2: Întregi, numere între 0 și 1, interval uniform

integers(1, 11) dă valori de la 1 la 10 (11 este exclus).

import numpy as np

rng = np.random.default_rng(2026)
print("Note:", rng.integers(1, 11, size=6))
print("Zaruri:", rng.integers(1, 6, size=4, endpoint=True))
print("Între 0 și 1:", rng.random(3).round(3))
print("Prețuri 10-50 lei:", rng.uniform(10, 50, size=3).round(2))

Rezultat

Note: [9 2 1 7 4 5]
Zaruri: [1 3 4 3]
Între 0 și 1: [0.791 0.905 0.177]
Prețuri 10-50 lei: [36.11 21.93 48.68]

Exemplul 3: Distribuția normală

1000 de înălțimi simulate cu media 170 cm și abaterea standard 8 cm; media și abaterea calculate sunt apropiate de valorile cerute.

import numpy as np

rng = np.random.default_rng(7)
inaltimi = rng.normal(loc=170, scale=8, size=1000)
print(inaltimi[:5].round(1))
print("Media:", round(float(inaltimi.mean()), 1))
print("Abaterea std:", round(float(inaltimi.std()), 1))
print(rng.integers(0, 100, size=(2, 3)))

Rezultat

[170.  172.4 167.8 162.9 166.4]
Media: 169.4
Abaterea std: 7.5
[[96 66 36]
 [28 77 39]]

Greșeli frecvente

  • Te aștepți ca rng.integers(1, 10) să poată da și 10. Capătul de sus este exclus; folosește integers(1, 11) sau endpoint=True.
  • Creezi un generator nou cu același seed în interiorul unei bucle: primești la fiecare pas aceleași numere. Creează generatorul o singură dată și folosește-l mai departe.
  • Amesteci np.random.seed() cu default_rng() și crezi că seed-ul global afectează generatorul. Nu îl afectează: generatorul are propria stare.

Comenzi înrudite

  • Generator.choice(): Alege la întâmplare elemente dintr-un tablou (choice), amestecă un tablou pe loc (shuffle) sau returnează o copie amestecată (permutation).
  • np.array(): Creează un tablou NumPy (ndarray) dintr-o listă, o listă de liste sau alt obiect asemănător.
  • np.mean(): Calculează media aritmetică (np.mean), mediana (np.median) și media ponderată (np.average cu weights).