Bab sebelumnya memperkenalkan notasi a[i] untuk membaca satu elemen. Bab ini merapikan aturan main indexing pada array satu dimensi: dari angka mana indeks mulai dihitung, rentang indeks yang valid, hingga kesalahan out of bounds yang paling sering dialami pemula. Contoh berjalan masih memakai array nilai ujian delapan mahasiswa agar kita bisa membandingkan langsung dengan bab sebelumnya.

Indeks Mulai dari Nol #

Dalam kehidupan sehari-hari kita menghitung posisi dari satu, tetapi NumPy — sebagaimana hampir semua bahasa pemrograman — menghitung indeks dari nol. Elemen pertama berada pada indeks 0, sehingga elemen ke-n berada pada indeks n-1. Kita buktikan dengan mencetak setiap pasangan indeks dan nilai:

python
import numpy as np

nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
print(len(nilai))
for i in range(len(nilai)):
    print(i, nilai[i])

Output yang Dihasilkan:

text
8
0 78
1 85
2 92
3 69
4 88
5 95
6 73
7 81

Bedah baris demi baris:

  1. Baris 3 (nilai = np.array(...)): array satu dimensi dengan delapan elemen dibuat dari list Python.
  2. Baris 4 (print(len(nilai))): fungsi len() menghitung jumlah elemen, yaitu 8. Pada array satu dimensi, angka ini sekaligus panjang sumbu tempat indexing bekerja.
  3. Baris 5-6 (for i in range(len(nilai))): range(8) menghasilkan bilangan 0 sampai 7 — tepat seluruh indeks yang valid — dan setiap iterasi mencetak pasangan indeks beserta nilainya.

Konsekuensi penomoran dari nol ini perlu kita pegang kuat:

Posisi bagi manusiaIndeks NumPyNilai
ke-1078
ke-5488
ke-8781

Ketika seseorang meminta “nilai kelima”, kode yang benar adalah nilai[4], bukan nilai[5]. Salah hitung satu langkah seperti ini disebut off-by-one error dan merupakan sumber bug paling umum dalam indexing.

Rentang Indeks yang Valid #

Untuk array dengan N elemen, indeks yang valid adalah 0 sampai N-1. Elemen terakhir dengan demikian berada pada indeks len(nilai) - 1:

python
import numpy as np

nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
terakhir = len(nilai) - 1
print(nilai[terakhir])
print(nilai[len(nilai) - 1])

Output yang Dihasilkan:

text
81
81

Kedua baris print menghasilkan 81 karena keduanya menunjuk indeks 7. Pola nilai[len(nilai) - 1] memang benar, tetapi terasa panjang untuk sekadar mengambil elemen akhir. NumPy menyediakan bentuk yang lebih ringkas melalui indeks negatif, dan akan dibahas lebih lanjut pada Chapter Negative Indexing.

IndexError saat Indeks di Luar Batas #

Bagaimana jika kita meminta indeks di luar rentang valid? NumPy tidak mendiamkan permintaan tersebut; interpreter memunculkan exception IndexError. Dengan try/except kita dapat menangkapnya dan membaca pesannya tanpa menghentikan program:

python
import numpy as np

nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
try:
    print(nilai[8])
except IndexError as e:
    print("IndexError:", e)
try:
    print(nilai[-9])
except IndexError as e:
    print("IndexError:", e)

Output yang Dihasilkan:

text
IndexError: index 8 is out of bounds for axis 0 with size 8
IndexError: index -9 is out of bounds for axis 0 with size 8

Pesan galat NumPy sangat informatif bila kita membacanya per bagian:

Potongan pesanArti
index 8indeks yang diminta oleh kode kita
is out of boundsindeks berada di luar batas rentang valid
axis 0sumbu (dimensi) tempat indexing dilakukan
with size 8jumlah elemen aktual pada sumbu tersebut

Baris kedua contoh menunjukkan bahwa indeks negatif punya batas juga: untuk array delapan elemen, indeks negatif valid hanya dari -8 sampai -1, sehingga nilai[-9] gagal dengan pesan out of bounds yang sama.

Ringkasan aturan pada bab ini:

  • Indeks valid berada pada rentang 0 sampai len(nilai) - 1.
  • Posisi ke-n menurut manusia bersesuaian dengan indeks n - 1.
  • Indeks di luar rentang — positif maupun negatif — memunculkan IndexError yang menyebut sumbu (axis 0) dan ukurannya (size).