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:
| Operator | Fungsi setara | Keterangan |
|---|---|---|
a + b | np.add(a, b) | penjumlahan |
a - b | np.subtract(a, b) | pengurangan |
a * b | np.multiply(a, b) | perkalian elemen demi elemen |
a / b | np.divide(a, b) | pembagian |
a // b | np.floor_divide(a, b) | pembagian lantai |
a % b | np.mod(a, b) | sisa bagi; np.mod adalah alias dari np.remainder |
a ** b | np.power(a, b) | pangkat |
-a | np.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:
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:
[ 8 10 12]
[ 8 10 12]
True
[-6 -7 -8]
[-6 -7 -8]
True- Baris 5-6:
np.add(a, b)dana + bmemberi array yang sama,[ 8 10 12]. - Baris 7:
np.array_equalmembandingkan keduanya secara utuh dan menyatakanTrue. - 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:
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:
[107 109 112]
[ 7.5 9.5 12.5]
(3,) int64- Baris 4 (
np.add(a, 100)): scalar100diterapkan seragam ke semua elemen — setara penuh dengana + 100. - Baris 5: ketika operannya berisi float, dtype hasil mengikuti dtype yang lebih tinggi dan menjadi
[ 7.5 9.5 12.5]. - 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:
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:
np.add True
np.subtract True
np.multiply True
np.divide True
np.floor_divide True
np.mod True
np.power True- Baris 5-13: setiap entri
daftarmenyimpan tiga hal — nama ufunc, hasil versi fungsi, dan hasil versi operator untuk pasangan array yang sama. - Baris 14-15: perulangan memanggil
np.array_equaluntuk setiap pasangan; tujuhTruemenegaskan bahwa kedua gaya benar-benar setara padanp.divide(hasil float) maupunnp.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:
- Fungsi dikirim sebagai objek — misalnya
np.add.reduce(a)ataunp.add.accumulate(a), karena operator+tidak bisa membawa metode. - Parameter tambahan diperlukan — seperti
out=untuk menulis hasil ke array yang tersedia pada Chapter Operasi In-place. - Operasi dipilih saat program berjalan — tabel pemetaan pada kode (misalnya dictionary
{"tambah": np.add, "kurang": np.subtract}) memudahkan pemilihan operasi lewat nama.