Setelah array dapat dibuat dan diindeks, langkah berikutnya adalah mengolah isinya. Bayangkan kasir toko yang harus menghitung total belanja ratusan transaksi: dengan Python list, kita menulis perulangan for dan mengalikan pasangan nilai satu per satu. NumPy menghapus kebutuhan itu — operator aritmetika bekerja pada seluruh elemen array sekaligus, dan perulangan sesungguhnya dijalankan oleh kode C di dalam NumPy.
Chapter ini membahas tiga kelompok kasus:
- Operasi antara dua array berbentuk sama: elemen pada posisi yang sama dipasangkan.
- Operasi antara array dan satu angka (scalar).
- Tiga operator pelengkap:
//(pembagian lantai),%(sisa bagi), dan**(pangkat).
Operasi antar array berbentuk sama #
Ketika dua array memiliki bentuk (shape) yang sama, setiap operator aritmetika memasangkan elemen pada posisi yang sama. Contoh berikut menghitung total penjualan tiga produk dari harga satuan dan jumlah terjual, lalu membandingkan penjualan dua hari:
import numpy as np
harga = np.array([15000, 24000, 8500])
jumlah = np.array([3, 2, 5])
total = harga * jumlah
print(total)
hari1 = np.array([45000, 48000, 42500])
hari2 = np.array([38000, 51000, 46000])
print(hari1 + hari2)
print(hari1 - hari2)Output yang Dihasilkan:
[45000 48000 42500]
[83000 99000 88500]
[ 7000 -3000 -3500]Mari kita bedah:
- Baris 3-4:
hargadanjumlahadalah dua array 1-D dengan bentuk(3,)yang sama. - Baris 5 (
total = harga * jumlah): NumPy mengalikan pasangan elemen pada posisi yang sama —15000*3,24000*2,8500*5— tanpa satu barisforpun yang kita tulis. Hasilnya array baru berisi[45000 48000 42500]. - Baris 9 (
hari1 + hari2): penjumlahan per posisi menghasilkan total gabungan dua hari untuk tiap produk. - Baris 10 (
hari1 - hari2): pengurangan per posisi dapat bernilai negatif. Tampilan array menyisipkan spasi tambahan agar kolom angka tetap sejajar dengan tanda minus.
Array dengan satu angka (scalar) #
Sering kali salah satu sisi operasi bukan array, melainkan satu angka: biaya kirim tetap untuk semua pesanan, atau potongan harga 10 persen untuk semua produk. NumPy menerapkan angka tunggal tersebut ke setiap elemen:
import numpy as np
total = np.array([45000, 48000, 42500])
print(total + 5000) # ongkir tetap per pesanan
print(total * 0.9) # potongan 10 persen
print(total / 2)Output yang Dihasilkan:
[50000 53000 47500]
[40500. 43200. 38250.]
[22500. 24000. 21250.]- Baris 4 (
total + 5000): angka5000digabungkan ke setiap elemen array. NumPy “meregangkan” angka tunggal itu secara konseptual agar cocok dengan bentuk array — perilaku ini disebut broadcasting dan dibahas tuntas pada Chapter Pengenalan Broadcasting. - Baris 5 (
total * 0.9): mengalikan dengan0.9sama artinya dengan memberi potongan 10 persen. Hasil berubah menjadi bilangan pecahan — ditandai titik di akhir angka — karena operannya berisi float. - Baris 6 (
total / 2): operator/selalu menghasilkan float, bahkan ketika pembagiannya habis.
Pembagian lantai, sisa bagi, dan pangkat #
Tiga operator pelengkap melengkapi kebutuhan perhitungan sehari-hari. Contoh klasiknya: membagi stok ke dalam dus dan menghitung sisanya, atau mengkuadratkan panjang sisi:
import numpy as np
stok = np.array([100, 75, 30])
print(stok // 12) # banyak lusin penuh
print(stok % 12) # sisa barang
sisi = np.array([3, 5, 9])
print(sisi ** 2) # kuadrat tiap sisiOutput yang Dihasilkan:
[8 6 2]
[4 3 6]
[ 9 25 81]- Baris 4 (
stok // 12): pembagian lantai membuang bagian pecahan —100//12menjadi 8,75//12menjadi 6,30//12menjadi 2. - Baris 5 (
stok % 12): sisa bagi melengkapi hasil//:8*12 + 4 = 100, dan seterusnya untuk elemen lain. - Baris 7 (
sisi ** 2): pangkat diterapkan pada tiap elemen, menghasilkan9,25, dan81.
Tabel berikut merangkum ketujuh operator aritmetika pada array:
| Operator | Nama | Keterangan |
|---|---|---|
+ | Penjumlahan | Menjumlahkan elemen pada posisi yang sama |
- | Pengurangan | Hasil boleh negatif |
* | Perkalian | Element-wise, bukan perkalian matriks |
/ | Pembagian | Selalu menghasilkan float |
// | Pembagian lantai | Membuang bagian pecahan dari hasil pembagian |
% | Sisa bagi (modulo) | Sisa pembagian tiap elemen |
** | Pangkat | Tiap elemen dipangkatkan |