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știValueError. - Scrii
x = rng.shuffle(x):shufflereturneazăNone. Foloseșterng.shuffle(x)singur saux = rng.permutation(x). - Dai probabilități care nu au suma 1 (de exemplu
p=[0.7, 0.2]) și primeștiValueError: 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].