Ce face np.sum()
np.sum() adună elementele unui tablou. Fără axis, adună tot și returnează un singur număr. Aceeași operație există și ca metodă: a.sum().
Parametrul axis spune pe ce direcție se face adunarea. Într-un tablou 2D, axis=0 adună „în jos”, pe fiecare coloană (rezultatul are câte un număr pentru fiecare coloană), iar axis=1 adună „spre dreapta”, pe fiecare rând. Axa aleasă dispare din rezultat.
Cu keepdims=True, axa pe care ai adunat rămâne în formă, cu lungimea 1. Rezultatul se poate folosi apoi direct în broadcasting, de exemplu ca să împarți fiecare rând la totalul lui.
Parametri
| Parametru | Descriere |
|---|---|
a |
Tabloul (sau lista) de adunat. |
axis |
Axa pe care se adună: None (implicit, tot tabloul), 0, 1 sau un tuplu de axe. |
dtype |
Tipul folosit pentru acumulare și pentru rezultat, de exemplu np.float64. |
keepdims |
Dacă este True, axa adunată rămâne în rezultat cu lungimea 1. |
initial |
Valoarea de pornire a sumei (implicit 0). |
where |
Mască booleană: se adună doar elementele unde masca este True. |
Ce returnează
Un scalar NumPy (când se adună tot) sau un tablou cu axa adunată eliminată.
Exemple
Exemplul 1: Total, pe coloane și pe rânduri
Rândurile sunt orașele (Iași, Cluj, Brașov), coloanele sunt lunile ianuarie–martie, valorile sunt vânzări în mii de lei.
import numpy as np
vanzari = np.array([
[12, 15, 11], # Iași
[20, 18, 22], # Cluj
[8, 9, 10], # Brașov
])
print("Total:", vanzari.sum())
print("Pe luni (axis=0):", vanzari.sum(axis=0))
print("Pe orașe (axis=1):", np.sum(vanzari, axis=1))
Rezultat
Total: 125
Pe luni (axis=0): [40 42 43]
Pe orașe (axis=1): [38 60 27]
Exemplul 2: keepdims pentru procente pe rând
Totalul fiecărui rând are forma (3, 1), așa că împărțirea se face rând cu rând.
import numpy as np
vanzari = np.array([[12, 15, 11], [20, 18, 22], [8, 9, 10]])
total_rand = vanzari.sum(axis=1, keepdims=True)
print(total_rand.shape)
procente = vanzari / total_rand * 100
print(procente.round(1))
Rezultat
(3, 1)
[[31.6 39.5 28.9]
[33.3 30. 36.7]
[29.6 33.3 37. ]]
Exemplul 3: Numărarea valorilor care îndeplinesc o condiție
True contează ca 1 și False ca 0, deci suma unei măști booleene este numărul de elemente care trec condiția.
import numpy as np
note = np.array([9, 4, 7, 10, 5, 3, 8])
print("Promovați:", np.sum(note >= 5))
print("Suma notelor de trecere:", note.sum(where=note >= 5))
Rezultat
Promovați: 5
Suma notelor de trecere: 39
Greșeli frecvente
- Confunzi axele:
axis=0nu înseamnă „pe rânduri”, ci adunarea de-a lungul rândurilor, adică un total pentru fiecare coloană. - Folosești funcția încorporată
sum()pe un tablou 2D: ea adună rândurile între ele și returnează un tablou, nu totalul. Pentru total foloseștenp.sum(a)saua.sum(). - Aduni numere întregi mici cu
dtype=np.int8și rezultatul depășește intervalul tipului. Lasă tipul implicit sau dădtype=np.int64.
Comenzi înrudite
np.mean(): Calculează media aritmetică (np.mean), mediana (np.median) și media ponderată (np.average cu weights).np.cumsum(): Calculează sume cumulate (np.cumsum), produse cumulate (np.cumprod) și diferențele dintre elemente vecine (np.diff).np.min() și np.max(): Găsește valoarea minimă și maximă (np.min, np.max), diferența dintre ele (np.ptp) și maximul element cu element (np.maximum).Broadcasting: Regulile prin care NumPy face operații între tablouri de forme diferite, de exemplu o matrice și un rând sau un scalar.Măști booleene: Selectează elementele care îndeplinesc o condiție, cu un tablou de True/False pus între paranteze pătrate.