np.where() în NumPy

Cu trei argumente alege valori după o condiție (dacă-altfel pe tablouri); cu un argument returnează pozițiile unde condiția e adevărată.

Sintaxă
np.where(conditie, x, y)
np.where(conditie)
np.nonzero(a)

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 x fă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 ia np.where(cond)[0].
  • Scrii condiții compuse cu and/or: pe tablouri dau ValueError. 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).