Ce face np.where()
Cu trei argumente, np.where(conditie, x, y) construiește un tablou nou: pe fiecare poziție ia valoarea din x unde condiția este True și din y unde este False. Este echivalentul unui if/else aplicat pe fiecare element, fără buclă. x și y pot fi tablouri sau scalari.
Cu un singur argument, np.where(conditie) returnează pozițiile elementelor True, sub forma unui tuplu cu câte un tablou de indici pe fiecare axă. Este același lucru cu np.nonzero(conditie); pentru un tablou 1D, indicii sunt în rezultat[0].
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Un tablou boolean (de exemplu note >= 5). |
x |
Valorile folosite unde condiția este adevărată. |
y |
Valorile folosite unde condiția este falsă. x și y se dau împreună sau deloc. |
a |
La np.nonzero: tabloul în care se caută elementele diferite de zero (sau True). |
Ce returnează
Cu trei argumente: un tablou nou. Cu un argument (și np.nonzero): un tuplu de tablouri de indici.
Exemple
Exemplul 1: Admis sau respins
import numpy as np
note = np.array([9, 4, 7, 3, 10])
print(np.where(note >= 5, "admis", "respins"))
print(np.where(note < 5, 0, note))
Rezultat
['admis' 'respins' 'admis' 'respins' 'admis']
[ 9 0 7 0 10]
Exemplul 2: Reducere doar pentru produsele scumpe
Produsele de peste 100 de lei primesc 10% reducere, celelalte rămân la același preț.
import numpy as np
preturi = np.array([250.0, 45.0, 120.0, 80.0])
finale = np.where(preturi > 100, preturi * 0.9, preturi)
print(finale)
Rezultat
[225. 45. 108. 80.]
Exemplul 3: Pozițiile elementelor care îndeplinesc condiția
import numpy as np
vanzari = np.array([1200, 950, 1600, 1100, 1750])
indici = np.where(vanzari > 1150)
print(indici)
print(indici[0])
tabel = np.array([[0, 3], [5, 0]])
randuri, coloane = np.nonzero(tabel)
print(randuri, coloane)
Rezultat
(array([0, 2, 4]),)
[0 2 4]
[0 1] [1 0]
Greșeli frecvente
- Dai doar
xfărăy:np.where(cond, x)dă eroare. Fie dai ambele valori, fie doar condiția. - Folosești rezultatul lui
np.where(cond)ca pe o listă de indici, dar el este un tuplu. Pentru 1D ianp.where(cond)[0]. - Scrii condiții compuse cu
and/or: pe tablouri dauValueError. Folosește(a > 1) & (a < 5), cu paranteze.
Comenzi înrudite
Măști booleene: Selectează elementele care îndeplinesc o condiție, cu un tablou de True/False pus între paranteze pătrate.np.argmax(): Returnează poziția (indicele) valorii maxime sau minime, nu valoarea; np.unravel_index transformă indicele în rând și coloană.np.clip(): Limitează valorile unui tablou la un interval: ce e sub minim devine minimul, ce e peste maxim devine maximul.np.unique(): Returnează valorile distincte dintr-un tablou, sortate, și opțional de câte ori apare fiecare (return_counts).