Chapter Fungsi Universal (ufunc) menunjukkan bahwa operator + pada array memanggil ufunc np.add di balik layar. Artinya, hampir setiap operasi array dapat ditulis dengan dua gaya: gaya operator yang ringkas, atau gaya fungsi yang eksplisit. Keduanya dijalankan oleh mesin yang sama dan menghasilkan nilai yang identik; yang membedakan hanyalah kapan masing-masing gaya lebih nyaman dipakai.

Yang kita kerjakan di bab ini:

  • Menyusun tabel pemetaan lengkap operator dan fungsi setaranya.
  • Membuktikan kesetaraan itu dengan np.array_equal.
  • Menandai situasi yang menuntut gaya fungsi.

Pemetaan operator ke fungsi setara #

Tabel berikut adalah rujukan utama bab ini — delapan operasi, dua penulisan:

OperatorFungsi setaraKeterangan
a + bnp.add(a, b)penjumlahan
a - bnp.subtract(a, b)pengurangan
a * bnp.multiply(a, b)perkalian elemen demi elemen
a / bnp.divide(a, b)pembagian
a // bnp.floor_divide(a, b)pembagian lantai
a % bnp.mod(a, b)sisa bagi; np.mod adalah alias dari np.remainder
a ** bnp.power(a, b)pangkat
-anp.negative(a)pembalikan tanda, satu operan

Kedua gaya menerima array maupun campuran array dan scalar, dan keduanya menghasilkan dtype serta bentuk yang sama. Kita buktikan langsung untuk + dan -a:

python
import numpy as np

a = np.array([6, 7, 8])
b = np.array([2, 3, 4])
print(np.add(a, b))
print(a + b)
print(np.array_equal(np.add(a, b), a + b))
print(np.negative(a))
print(-a)
print(np.array_equal(np.negative(a), -a))

Output yang Dihasilkan:

text
[ 8 10 12]
[ 8 10 12]
True
[-6 -7 -8]
[-6 -7 -8]
True
  1. Baris 5-6: np.add(a, b) dan a + b memberi array yang sama, [ 8 10 12].
  2. Baris 7: np.array_equal membandingkan keduanya secara utuh dan menyatakan True.
  3. Baris 8-10: pola yang sama berlaku untuk operator satu operan: np.negative(a) identik dengan -a.

Gaya fungsi juga bekerja untuk campuran array dan scalar, dengan dtype hasil mengikuti aturan yang sama seperti pada Chapter Operasi Aritmetika:

python
import numpy as np

a = np.array([7, 9, 12])
print(np.add(a, 100))
print(np.add(a, np.array([0.5, 0.5, 0.5])))
hasil = np.add(a, 100)
print(hasil.shape, hasil.dtype)

Output yang Dihasilkan:

text
[107 109 112]
[ 7.5  9.5 12.5]
(3,) int64
  1. Baris 4 (np.add(a, 100)): scalar 100 diterapkan seragam ke semua elemen — setara penuh dengan a + 100.
  2. Baris 5: ketika operannya berisi float, dtype hasil mengikuti dtype yang lebih tinggi dan menjadi [ 7.5 9.5 12.5].
  3. Baris 7: bentuk dan dtype hasil — (3,) int64 — sama persis seolah dihitung lewat operator.

Menguji ketujuh pasangan sekaligus #

Bukti satu per satu melelahkan, jadi kita uji seluruh pasangan biner dalam satu perulangan. Setiap baris membandingkan hasil versi fungsi dengan hasil versi operator:

python
import numpy as np

a = np.array([7, 9, 12])
b = np.array([2, 4, 5])
daftar = [
    ("np.add", np.add(a, b), a + b),
    ("np.subtract", np.subtract(a, b), a - b),
    ("np.multiply", np.multiply(a, b), a * b),
    ("np.divide", np.divide(a, b), a / b),
    ("np.floor_divide", np.floor_divide(a, b), a // b),
    ("np.mod", np.mod(a, b), a % b),
    ("np.power", np.power(a, b), a ** b),
]
for nama, via_fungsi, via_operator in daftar:
    print(nama, np.array_equal(via_fungsi, via_operator))

Output yang Dihasilkan:

text
np.add True
np.subtract True
np.multiply True
np.divide True
np.floor_divide True
np.mod True
np.power True
  1. Baris 5-13: setiap entri daftar menyimpan tiga hal — nama ufunc, hasil versi fungsi, dan hasil versi operator untuk pasangan array yang sama.
  2. Baris 14-15: perulangan memanggil np.array_equal untuk setiap pasangan; tujuh True menegaskan bahwa kedua gaya benar-benar setara pada np.divide (hasil float) maupun np.floor_divide (hasil bulat).

Kapan memilih gaya fungsi #

Karena hasilnya identik, pilihan gaya adalah soal keterbacaan dan kebutuhan teknis. Gaya fungsi menjadi satu-satunya pilihan ketika:

  1. Fungsi dikirim sebagai objek — misalnya np.add.reduce(a) atau np.add.accumulate(a), karena operator + tidak bisa membawa metode.
  2. Parameter tambahan diperlukan — seperti out= untuk menulis hasil ke array yang tersedia pada Chapter Operasi In-place.
  3. Operasi dipilih saat program berjalan — tabel pemetaan pada kode (misalnya dictionary {"tambah": np.add, "kurang": np.subtract}) memudahkan pemilihan operasi lewat nama.