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șteprepend=sauappend=.
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).