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:

python
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:

text
75000
75000
87000

Bedah baris demi baris:

  1. Baris 3 (belanja = np.array(...)): interpreter membuat array integer berisi tiga nilai belanja dalam rupiah.
  2. Baris 4 (np.sum(belanja)): fungsi np.sum menjumlahkan 25000 + 18000 + 32000 dan mengembalikan scalar 75000.
  3. 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 objek ndarray.
  4. Baris 6 (belanja.sum(initial=12000)): parameter initial memberi nilai awal 12000 — misalnya ongkos kirim — sebelum elemen array dijumlahkan, sehingga hasilnya 87000. Tanpa argumen ini, penjumlahan dimulai dari 0.

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):

python
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:

text
[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:

python
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:

text
1.1031300000000002
1103130.0
24

Bedah baris demi baris:

  1. Baris 3 (faktor = np.array(...)): tiap elemen adalah faktor pengali saldo per tahun; faktor 1.05 berarti saldo bertambah 5 persen.
  2. 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.
  3. Baris 6 (round(...)): modal Rp1.000.000 dikalikan faktor total, lalu dibulatkan dua desimal menjadi 1103130.0 (Rp1.103.130).
  4. Baris 7: pada array integer, hasil np.prod juga 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.

Aspeknp.sumnp.prod
Operasimenjumlahkan seluruh elemenmengalikan seluruh elemen
Contoh pada [2, 3, 4]924
Dipakai untuktotal, akumulasi penjumlahanfaktor pengali berantai, bunga majemuk
python
import numpy as np

angka = np.array([10.0, 20.0, np.nan])
print(np.sum(angka))
print(np.prod(angka))

Output yang Dihasilkan:

text
nan
nan

NaN (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.