Setelah melihat kekuatan NumPy, godaannya adalah memakainya di mana-mana. Padahal alat yang tepat ditentukan oleh skala data dan bentuk perhitungan, bukan oleh tingkat kecanggihan pustaka. Aturan praktisnya dapat diringkas dua arah: kapan ndarray memberi keuntungan nyata, dan kapan list Python justru lebih sederhana.
Situasi yang Cocok untuk NumPy #
- Data numerik homogen dalam jumlah besar — ribuan elemen ke atas; hemat memori karena nilai disimpan mentah dalam buffer.
- Operasi yang sama diterapkan ke banyak elemen — vectorization menggantikan loop Python dengan satu panggilan kode C.
- Statistik dan agregasi —
mean,std, persentil, dan peringkasan sepanjang axis tertentu. - Aljabar linear — perkalian dot, sistem persamaan, dan operasi matriks yang menjadi dasar machine learning.
- Simulasi angka acak yang harus direproduksi — generator ber-seed menjamin deret yang sama di mesin mana pun.
Situasi yang Lebih Tepat dengan Python Murni #
- Data sangat kecil dan dihitung sesekali — biaya overhead array belum terbayar; list lebih ringkas.
- Data didominasi teks atau tipe campuran — list dan dict menyimpan objek bebas tanpa konversi paksa.
- Struktur bertingkat yang dinamis — data menyerupai JSON yang bentuknya sering berubah lebih nyaman sebagai list dan dict.
- Logika percabangan rumit per elemen — loop Python sering lebih terbaca daripada trik vektorisasi yang dipaksakan.
Kekakuan ndarray terhadap struktur tidak seragam terlihat langsung ketika datanya tidak rapi — misalnya list bersarang dengan panjang baris berbeda:
import numpy as np
keranjang = [[15000, 3], [8000, 5, 2]] # panjang baris tidak seragam
try:
np.array(keranjang)
except ValueError as e:
print("ValueError:", e)Output yang Dihasilkan:
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.Data semacam ini tetap sah sebagai list Python — keranjang[0] dan keranjang[1] bisa dibaca seperti biasa. NumPy menolaknya karena ndarray menuntut bentuk yang seragam di semua dimensi.
Loop vs Vectorization dalam Satu Perhitungan #
Kita hitung total pendapatan dari tiga produk — harga dikali jumlah terjual — dengan dua gaya berbeda di dalam satu blok:
import numpy as np
harga = np.array([15000, 8000, 12000])
terjual = np.array([3, 5, 2])
# gaya loop: iterasi per elemen
total_loop = 0
for i in range(len(harga)):
total_loop = total_loop + harga[i] * terjual[i]
# gaya vectorization: satu ekspresi untuk seluruh elemen
total_vector = np.sum(harga * terjual)
print(total_loop)
print(total_vector)Output yang Dihasilkan:
109000
109000Kedua pendekatan menghasilkan angka yang persis sama: 109000 rupiah. Perbedaannya terletak pada siapa yang menjalankan pengulangan. Pada gaya loop, interpreter Python mengeksekusi badan loop tiga kali. Pada gaya vectorization, pengulangan terjadi di dalam satu panggilan fungsi C — dan selisih mekanisme ini yang membesar seiring jumlah data.
Kita juga perlu jujur soal sisi sebaliknya. Pada array yang sangat kecil seperti contoh di atas, kecepatan keduanya nyaris tidak terbedakan; list bahkan bisa menang karena NumPy menanggung biaya konversi dan alokasi array. Keunggulan vectorization baru terasa pada data ribuan elemen ke atas, dan makin lebar pada jutaan elemen.
Dua pertanyaan di atas — seberapa banyak data dan seberapa numerik datanya — cukup untuk mengarahkan keputusan sehari-hari. Bila jawabannya “banyak” dan “murni angka”, ndarray adalah pilihan bawaan yang aman; bila tidak, list Python menunggu di tempatnya. Karakteristik kedua wadah ini telah kita bedah sisi demi sisi pada bab NumPy vs Python List.