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:

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

text
[45000 48000 42500]
[83000 99000 88500]
[ 7000 -3000 -3500]

Mari kita bedah:

  1. Baris 3-4: harga dan jumlah adalah dua array 1-D dengan bentuk (3,) yang sama.
  2. Baris 5 (total = harga * jumlah): NumPy mengalikan pasangan elemen pada posisi yang sama — 15000*3, 24000*2, 8500*5 — tanpa satu baris for pun yang kita tulis. Hasilnya array baru berisi [45000 48000 42500].
  3. Baris 9 (hari1 + hari2): penjumlahan per posisi menghasilkan total gabungan dua hari untuk tiap produk.
  4. 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:

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

text
[50000 53000 47500]
[40500. 43200. 38250.]
[22500. 24000. 21250.]
  1. Baris 4 (total + 5000): angka 5000 digabungkan 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.
  2. Baris 5 (total * 0.9): mengalikan dengan 0.9 sama artinya dengan memberi potongan 10 persen. Hasil berubah menjadi bilangan pecahan — ditandai titik di akhir angka — karena operannya berisi float.
  3. 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:

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

Output yang Dihasilkan:

text
[8 6 2]
[4 3 6]
[ 9 25 81]
  1. Baris 4 (stok // 12): pembagian lantai membuang bagian pecahan — 100//12 menjadi 8, 75//12 menjadi 6, 30//12 menjadi 2.
  2. Baris 5 (stok % 12): sisa bagi melengkapi hasil //: 8*12 + 4 = 100, dan seterusnya untuk elemen lain.
  3. Baris 7 (sisi ** 2): pangkat diterapkan pada tiap elemen, menghasilkan 9, 25, dan 81.

Tabel berikut merangkum ketujuh operator aritmetika pada array:

OperatorNamaKeterangan
+PenjumlahanMenjumlahkan elemen pada posisi yang sama
-PenguranganHasil boleh negatif
*PerkalianElement-wise, bukan perkalian matriks
/PembagianSelalu menghasilkan float
//Pembagian lantaiMembuang bagian pecahan dari hasil pembagian
%Sisa bagi (modulo)Sisa pembagian tiap elemen
**PangkatTiap elemen dipangkatkan