Generator.choice() în NumPy

Numere aleatorii NumPy 1.17+

Alege la întâmplare elemente dintr-un tablou (choice), amestecă un tablou pe loc (shuffle) sau returnează o copie amestecată (permutation).

Sintaxă
rng.choice(a, size=None, replace=True, p=None, axis=0, shuffle=True)
rng.shuffle(x, axis=0)
rng.permutation(x, axis=0)

Ce face Generator.choice()

rng.choice(a, size) alege size elemente din a. Implicit alegerea se face cu întoarcere (replace=True), deci același element poate apărea de mai multe ori. Cu replace=False fiecare element se alege cel mult o dată, ca la o extragere de bilete. Parametrul p dă probabilitatea fiecărui element (valorile trebuie să aibă suma 1).

rng.shuffle(x) amestecă tabloul x pe loc și returnează None. rng.permutation(x) returnează o copie amestecată și lasă x neschimbat; dacă primește un întreg n, returnează o permutare a numerelor de la 0 la n-1.

Toate folosesc generatorul rng creat cu np.random.default_rng(seed): cu un seed fix, rezultatele se repetă la fiecare rulare.

Parametri

Parametru Descriere
a Tabloul din care se alege, sau un întreg n (atunci se alege din range(n)).
size Câte elemente se aleg (sau forma rezultatului).
replace True (implicit): cu întoarcere; False: fără repetare.
p Probabilitățile fiecărui element, cu suma 1.
x La shuffle/permutation: tabloul de amestecat (sau un întreg la permutation).
axis Axa de-a lungul căreia se alege sau se amestecă; implicit 0 (rândurile).

Ce returnează

choice: un element sau un tablou. shuffle: None. permutation: un tablou nou.

Exemple

Exemplul 1: Extragerea câștigătorilor fără repetare

import numpy as np

rng = np.random.default_rng(10)
participanti = np.array(["Ana", "Mihai", "Ioana", "Radu", "Elena", "Andrei"])
print(rng.choice(participanti, size=3, replace=False))
print(rng.choice(participanti))

Rezultat

['Mihai' 'Elena' 'Radu']
Elena

Exemplul 2: Alegere cu probabilități diferite

Clienții plătesc cu cardul în 70% din cazuri; din 1000 de simulări, numărul este apropiat de 700.

import numpy as np

rng = np.random.default_rng(3)
plati = rng.choice(["card", "numerar"], size=1000, p=[0.7, 0.3])
valori, numar = np.unique(plati, return_counts=True)
print(valori, numar)

Rezultat

['card' 'numerar'] [711 289]

Exemplul 3: shuffle pe loc, permutation cu copie

import numpy as np

rng = np.random.default_rng(5)
elevi = np.array(["Ana", "Mihai", "Ioana", "Radu"])

amestecat = rng.permutation(elevi)
print(amestecat)
print(elevi)

rng.shuffle(elevi)
print(elevi)
print(rng.permutation(5))

Rezultat

['Radu' 'Mihai' 'Ioana' 'Ana']
['Ana' 'Mihai' 'Ioana' 'Radu']
['Ioana' 'Radu' 'Ana' 'Mihai']
[0 3 2 1 4]

Greșeli frecvente

  • Ceri mai multe elemente decât există cu replace=False: primești ValueError.
  • Scrii x = rng.shuffle(x): shuffle returnează None. Folosește rng.shuffle(x) singur sau x = rng.permutation(x).
  • Dai probabilități care nu au suma 1 (de exemplu p=[0.7, 0.2]) și primești ValueError: probabilities do not sum to 1.

Comenzi înrudite

  • np.random.default_rng(): Creează un generator de numere aleatorii (Generator); cu un seed fix obții aceleași numere la fiecare rulare.
  • np.unique(): Returnează valorile distincte dintr-un tablou, sortate, și opțional de câte ori apare fiecare (return_counts).
  • np.sort(): Sortează elementele unui tablou: np.sort returnează o copie, a.sort() sortează pe loc; ordinea descrescătoare cu [::-1].