np.cumsum() în NumPy

Calculează sume cumulate (np.cumsum), produse cumulate (np.cumprod) și diferențele dintre elemente vecine (np.diff).

Sintaxă
np.cumsum(a, axis=None, dtype=None)
np.cumprod(a, axis=None, dtype=None)
np.diff(a, n=1, axis=-1, prepend=..., append=...)

Ce face np.cumsum()

np.cumsum() returnează un tablou de aceeași lungime în care fiecare poziție conține suma tuturor elementelor de până atunci, inclusiv cel curent. Este „totalul de la începutul anului” pentru vânzări lunare. np.cumprod() face același lucru cu înmulțirea, util pentru creșteri procentuale succesive.

np.diff() face operația inversă: diferența dintre fiecare element și cel dinaintea lui (a[1] - a[0], a[2] - a[1] …). Rezultatul are cu un element mai puțin. Cu prepend= adaugi o valoare la început ca rezultatul să aibă aceeași lungime.

Fără axis, cumsum și cumprod aplatizează un tablou 2D și returnează un tablou 1D. Pe un tablou 2D, de obicei vrei axis=1 (pe fiecare rând) sau axis=0 (pe fiecare coloană).

Parametri

Parametru Descriere
a Tabloul.
axis Axa de cumulare; la cumsum/cumprod implicit None (tablou aplatizat), la diff implicit ultima axă.
dtype Tipul acumulatorului.
n La diff: de câte ori se aplică diferența (implicit 1).
prepend, append La diff: valori adăugate la început sau la sfârșit înainte de calcul.

Ce returnează

Un tablou nou. La diff, axa are cu n elemente mai puțin (dacă nu folosești prepend/append).

Exemple

Exemplul 1: Vânzări cumulate de la începutul anului

import numpy as np

lunar = np.array([1200, 950, 1430, 1100, 1600])
cumulat = np.cumsum(lunar)
print(cumulat)
print("Total după 3 luni:", cumulat[2])

Rezultat

[1200 2150 3580 4680 6280]
Total după 3 luni: 3580

Exemplul 2: Diferența față de luna anterioară

Fără prepend sunt 4 diferențe pentru 5 luni; cu prepend=lunar[0] prima diferență este 0.

import numpy as np

lunar = np.array([1200, 950, 1430, 1100, 1600])
print(np.diff(lunar))
print(np.diff(lunar, prepend=lunar[0]))
print(np.diff(np.cumsum(lunar), prepend=0))

Rezultat

[-250  480 -330  500]
[   0 -250  480 -330  500]
[1200  950 1430 1100 1600]

Exemplul 3: Creșteri procentuale succesive cu cumprod

Un preț de 100 de lei crește cu 10%, apoi 5%, apoi scade cu 2%.

import numpy as np

factori = np.array([1.10, 1.05, 0.98])
preturi = 100 * np.cumprod(factori)
print(preturi.round(2))

pe_rand = np.array([[1, 2, 3], [4, 5, 6]])
print(np.cumsum(pe_rand))
print(np.cumsum(pe_rand, axis=1))

Rezultat

[110.   115.5  113.19]
[ 1  3  6 10 15 21]
[[ 1  3  6]
 [ 4  9 15]]

Greșeli frecvente

  • Aplici np.cumsum() pe un tablou 2D fără axis și te miri că primești un tablou 1D: implicit tabloul este aplatizat.
  • Uiți că np.diff() scurtează tabloul cu un element și încerci să-l pui lângă datele inițiale. Folosește prepend= sau append=.

Comenzi înrudite

  • np.sum(): Adună elementele unui tablou: pe tot tabloul, pe coloane (axis=0) sau pe rânduri (axis=1).
  • Operații element cu element și ufunc-uri: Operatorii aritmetici și funcțiile matematice NumPy (ufunc-uri) se aplică pe fiecare element, fără bucle.
  • np.mean(): Calculează media aritmetică (np.mean), mediana (np.median) și media ponderată (np.average cu weights).