Măști booleene în NumPy

Selectează elementele care îndeplinesc o condiție, cu un tablou de True/False pus între paranteze pătrate.

Sintaxă
a[a > valoare]
a[(cond1) & (cond2)]
a[(cond1) | (cond2)]
a[~cond]
np.any(cond)
np.all(cond)

Ce face Măști booleene

O comparație pe un tablou, de exemplu note >= 5, dă un tablou de aceeași formă cu True și False: o mască. Pusă între paranteze pătrate, note[note >= 5], masca păstrează doar elementele unde este True.

Condițiile se combină cu & (și), | (sau) și ~ (negare), nu cu and, or, not. Fiecare condiție trebuie pusă în paranteze, pentru că & și | au prioritate mai mare decât comparațiile.

np.any(masca) spune dacă măcar un element este True, iar np.all(masca) dacă toate sunt. masca.sum() numără valorile True. Prin mască poți și atribui: a[a < 0] = 0.

Parametri

Parametru Descriere
mască Tablou de bool cu aceeași formă ca tabloul selectat (sau ca axa selectată).

Ce returnează

Un tablou 1D nou (copie) cu elementele selectate. np.any/np.all returnează True sau False.

Exemple

Exemplul 1: Note de trecere

import numpy as np

note = np.array([9, 4, 7, 10, 3, 6])
masca = note >= 5
print(masca)
print(note[masca])
print("Promovați:", masca.sum())

Rezultat

[ True False  True  True False  True]
[ 9  7 10  6]
Promovați: 4

Exemplul 2: Condiții combinate

Parantezele din jurul fiecărei condiții sunt obligatorii.

import numpy as np

preturi = np.array([12, 45, 8, 60, 25, 33])
print(preturi[(preturi >= 10) & (preturi <= 40)])
print(preturi[(preturi < 10) | (preturi > 50)])
print(preturi[~(preturi > 30)])

Rezultat

[12 25 33]
[ 8 60]
[12  8 25]

Exemplul 3: np.any, np.all și înlocuire

import numpy as np

stoc = np.array([5, -2, 0, 8, -1])
print("Există stoc negativ:", np.any(stoc < 0))
print("Tot stocul pozitiv:", np.all(stoc > 0))

stoc[stoc < 0] = 0
print(stoc)

Rezultat

Există stoc negativ: True
Tot stocul pozitiv: False
[5 0 0 8 0]

Greșeli frecvente

  • Folosești and/or: a[(a > 2) and (a < 8)] dă ValueError: The truth value of an array ... is ambiguous. Folosește & și |.
  • Uiți parantezele: a > 2 & a < 8 se calculează ca a > (2 & a) < 8 și dă eroare sau un rezultat greșit.
  • Scrii if a > 5: pentru un tablou. Condiția este ambiguă; spune explicit if np.any(a > 5): sau if np.all(a > 5):.

Comenzi înrudite

  • Indexare și slicing: Accesează un element, o bucată, un rând sau o coloană dintr-un tablou NumPy cu paranteze pătrate.
  • Indexare cu liste de indici: Selectează mai multe elemente, rânduri sau coloane deodată, dând o listă de poziții (fancy indexing).
  • np.where(): 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ă.
  • np.clip(): Limitează valorile unui tablou la un interval: ce e sub minim devine minimul, ce e peste maxim devine maximul.