Setiap laporan berakhir pada kebutuhan yang sama: merangkum deretan angka menjadi satu nilai yang mudah dibaca. Total penjualan sebulan, total stok gudang, atau saldo akhir setelah beberapa periode bunga — semuanya hasil dari operasi yang mereduksi banyak elemen menjadi satu ringkasan. NumPy menyebut kelompok operasi ini agregasi.
Dua agregasi paling mendasar adalah penjumlahan dan perkalian. Bab ini membahas np.sum beserta method .sum(), parameter initial, pratinjau parameter axis, dan np.prod untuk hasil kali elemen, termasuk perilaku keduanya ketika data memuat NaN.
Menghitung Total dengan np.sum dan .sum #
NumPy menyediakan dua gaya penulisan untuk total yang sama: fungsi np.sum(array) dan method array.sum(). Keduanya menjumlahkan seluruh elemen dan mengembalikan satu nilai. Kita coba keduanya pada data belanja harian, sekaligus mencoba parameter initial untuk menambahkan biaya pengiriman:
import numpy as np
belanja = np.array([25000, 18000, 32000])
print(np.sum(belanja))
print(belanja.sum())
print(belanja.sum(initial=12000))Output yang Dihasilkan:
75000
75000
87000Bedah baris demi baris:
- Baris 3 (
belanja = np.array(...)): interpreter membuat array integer berisi tiga nilai belanja dalam rupiah. - Baris 4 (
np.sum(belanja)): fungsinp.summenjumlahkan 25000 + 18000 + 32000 dan mengembalikan scalar75000. - Baris 5 (
belanja.sum()): method.sum()melakukan perhitungan yang persis sama. Gaya fungsi lebih luas pemakaiannya karena juga menerima list Python, sedangkan gaya method hanya tersedia pada objekndarray. - Baris 6 (
belanja.sum(initial=12000)): parameterinitialmemberi nilai awal12000— misalnya ongkos kirim — sebelum elemen array dijumlahkan, sehingga hasilnya87000. Tanpa argumen ini, penjumlahan dimulai dari0.
Pratinjau Agregasi per axis #
Pada array dua dimensi, agregasi sering kali harus diarahkan: total per baris atau total per kolom. Parameter axis mengatur arah tersebut. Kita pakai matriks penjualan tiga cabang x empat produk (dalam juta rupiah):
import numpy as np
penjualan = np.array([
[120, 85, 200, 65],
[90, 150, 110, 40],
[175, 60, 95, 130],
])
print(penjualan.sum(axis=0))
print(penjualan.sum(axis=1))Output yang Dihasilkan:
[385 295 405 235]
[470 390 460]Baris pertama adalah total per kolom: axis=0 melipat tiga baris sehingga menyisakan satu nilai untuk tiap produk. Baris kedua adalah total per baris: axis=1 melipat empat kolom sehingga menyisakan satu nilai per cabang. Jadi [385 295 405 235] adalah total penjualan tiap produk dari seluruh cabang, sedangkan [470 390 460] adalah total penjualan tiap cabang dari seluruh produk.
Aturan axis berlaku konsisten di hampir semua fungsi agregasi NumPy dan pantas dibahas mendalam. Cara membaca bentuk hasil, axis negatif, dan jebakan umumnya ada pada Chapter Operasi Berdasarkan Axis.
Mengalikan Elemen dengan np.prod #
Pasangan dari sum adalah np.prod: fungsi ini mengalikan seluruh elemen alih-alih menjumlahkannya. Contoh paling alami adalah bunga majemuk, ketika saldo bertumbuh dengan faktor pengali yang berbeda tiap periode:
import numpy as np
faktor = np.array([1.05, 1.03, 1.02]) # saldo tumbuh 5%, lalu 3%, lalu 2%
total_faktor = np.prod(faktor)
print(total_faktor)
print(round(1_000_000 * total_faktor, 2))
print(np.prod(np.array([2, 3, 4])))Output yang Dihasilkan:
1.1031300000000002
1103130.0
24Bedah baris demi baris:
- Baris 3 (
faktor = np.array(...)): tiap elemen adalah faktor pengali saldo per tahun; faktor1.05berarti saldo bertambah 5 persen. - Baris 4-5 (
np.prod(faktor)): mengalikan 1.05 x 1.03 x 1.02. Secara matematis hasilnya 1.10313 — faktor pertumbuhan total tiga tahun. - Baris 6 (
round(...)): modal Rp1.000.000 dikalikan faktor total, lalu dibulatkan dua desimal menjadi1103130.0(Rp1.103.130). - Baris 7: pada array integer, hasil
np.prodjuga integer: 2 x 3 x 4 =24.
Perhatikan bahwa hasil pertama bukan persis 1.10313 melainkan 1.1031300000000002. Ini artefak aritmetika floating point, bukan keanehan np.prod; pola seperti ini dibahas pada Chapter Penanganan Overflow dan Presisi.
| Aspek | np.sum | np.prod |
|---|---|---|
| Operasi | menjumlahkan seluruh elemen | mengalikan seluruh elemen |
Contoh pada [2, 3, 4] | 9 | 24 |
| Dipakai untuk | total, akumulasi penjumlahan | faktor pengali berantai, bunga majemuk |
import numpy as np
angka = np.array([10.0, 20.0, np.nan])
print(np.sum(angka))
print(np.prod(angka))Output yang Dihasilkan:
nan
nanNaN (Not a Number) menandai data yang tidak terdefinisi atau belum tersedia. Perhitungan apa pun yang menyentuh NaN menghasilkan NaN, sehingga total penjualan dengan satu data yang belum terisi bisa berubah menjadi nan tanpa pesan error. NumPy menyediakan varian yang mengabaikan NaN seperti np.nansum dan np.nanprod; pembahasannya ada pada Chapter NaN-aware Aggregation, setelah NaN diperkenalkan lebih detail pada Chapter NaN dan Infinity.
Kalau yang dibutuhkan bukan satu total, melainkan akumulasi berjalan dari awal hingga akhir (saldo per periode, misalnya), fungsi yang tepat adalah cumsum; pembahasannya ada pada Chapter Cumulative Sum dan Product.