np.sum() în NumPy

Adună elementele unui tablou: pe tot tabloul, pe coloane (axis=0) sau pe rânduri (axis=1).

Sintaxă
np.sum(a, axis=None, dtype=None, out=None, keepdims=False, initial=0, where=True)
a.sum(axis=None, ...)

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=0 nu î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ște np.sum(a) sau a.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.