Operații element cu element și ufunc-uri în NumPy

Operatorii aritmetici și funcțiile matematice NumPy (ufunc-uri) se aplică pe fiecare element, fără bucle.

Sintaxă
a + b, a - b, a * b, a / b, a // b, a % b, a ** b
np.sqrt(a), np.exp(a), np.log(a), np.abs(a)
np.round(a, decimals=0)

Ce face Operații element cu element și ufunc-uri

Operatorii +, -, *, /, //, % și ** lucrează element cu element: a * b înmulțește primul element din a cu primul din b și așa mai departe. Tablourile trebuie să aibă aceeași formă sau forme compatibile prin broadcasting.

Funcțiile universale (ufunc-uri) ca np.sqrt, np.exp, np.log, np.abs fac același lucru pentru operații matematice. Sunt scrise în C și sunt mult mai rapide decât o buclă Python.

np.round(a, decimals) rotunjește la numărul de zecimale cerut. Atenție: valorile exact la jumătate se rotunjesc la numărul par cel mai apropiat (np.round(2.5) dă 2.0).

Parametri

Parametru Descriere
a, b Tablouri (sau scalari) cu forme compatibile.
decimals La np.round: numărul de zecimale. Implicit 0; poate fi negativ (rotunjire la zeci, sute).
out Opțional, la ufunc-uri: tabloul în care se scrie rezultatul.

Ce returnează

Un tablou nou cu rezultatul pentru fiecare element.

Exemple

Exemplul 1: Aritmetică pe coșul de cumpărături

import numpy as np

preturi = np.array([4.5, 12.0, 7.25])
cantitati = np.array([2, 1, 4])

total = preturi * cantitati
print(total)
print("De plată:", total.sum(), "lei")
print(cantitati ** 2)
print(cantitati // 3, cantitati % 3)

Rezultat

[ 9. 12. 29.]
De plată: 50.0 lei
[ 4  1 16]
[0 0 1] [2 1 1]

Exemplul 2: np.sqrt, np.exp, np.abs

import numpy as np

suprafete = np.array([16, 25, 2])
print(np.sqrt(suprafete))
print(np.exp(np.array([0, 1])))
print(np.abs(np.array([-3, 5, -1])))

Rezultat

[4.         5.         1.41421356]
[1.         2.71828183]
[3 5 1]

Exemplul 3: Rotunjire

Cu decimals=-1 se rotunjește la zeci. 0.5 și 2.5 merg la cel mai apropiat număr par.

import numpy as np

medii = np.array([8.456, 9.333, 7.5])
print(np.round(medii, 2))
print(np.round(np.array([1234, 5678]), -1))
print(np.round(np.array([0.5, 1.5, 2.5])))

Rezultat

[8.46 9.33 7.5 ]
[1230 5680]
[0. 2. 2.]

Greșeli frecvente

  • Aștepți ca a * b să fie produs de matrice. Este produs element cu element; pentru matrice folosește a @ b sau np.matmul.
  • Folosești math.sqrt(a) pe un tablou: dă TypeError. Funcțiile din math lucrează doar cu un număr; folosește np.sqrt.
  • Împarți la zero sau iei np.sqrt dintr-un număr negativ: rezultatul este inf sau nan, însoțit de un RuntimeWarning, nu de o eroare. Verifică datele înainte.

Comenzi înrudite

  • Broadcasting: Regulile prin care NumPy face operații între tablouri de forme diferite, de exemplu o matrice și un rând sau un scalar.
  • np.clip(): Limitează valorile unui tablou la un interval: ce e sub minim devine minimul, ce e peste maxim devine maximul.
  • np.sum(): Adună elementele unui tablou: pe tot tabloul, pe coloane (axis=0) sau pe rânduri (axis=1).
  • np.matmul() și operatorul @: Înmulțirea de matrice cu np.matmul sau operatorul @; diferența față de *, care înmulțește element cu element.