Elemen terakhir adalah data yang paling sering dicari: nilai ujian terbaru, transaksi terakhir, atau penjualan hari ini. Dengan indeks positif kita harus menghitung len(nilai) - 1 terlebih dahulu — dan hitungan itu berubah setiap kali panjang array berubah. NumPy menyediakan negative indexing: indeks negatif yang menghitung posisi dari belakang, sehingga elemen terakhir selalu berada di -1 tanpa perlu tahu panjang array.
Indeks Negatif Menghitung dari Belakang #
Aturannya sederhana: -1 menunjuk elemen terakhir, -2 elemen sebelumnya, dan seterusnya sampai -N yang menunjuk elemen pertama. Kita uji pada array nilai ujian:
import numpy as np
nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
print(nilai[-1])
print(nilai[-2])
print(nilai[len(nilai) - 1])
print(nilai[-8])Output yang Dihasilkan:
81
73
81
78Bedah baris demi baris:
- Baris 3 (
nilai[-1]): NumPy menerjemahkan indeks-1menjadi elemen terakhir,81, tanpa perlu memanggillen()terlebih dahulu. - Baris 4 (
nilai[-2]): satu langkah dari belakang →73. - Baris 5 (
nilai[len(nilai) - 1]): cara manual dengan indeks positif; hasilnya juga81— bandingkan sendiri ringkasnya dengan baris 3. - Baris 6 (
nilai[-8]): indeks negatif terjauh yang valid untuk array delapan elemen, menunjuk elemen pertama,78.
Tabel berikut memetakan indeks negatif ke indeks positif ekuivalennya:
| Indeks negatif | Ekuivalen indeks positif | Nilai |
|---|---|---|
-1 | 7 | 81 |
-2 | 6 | 73 |
-3 | 5 | 95 |
-8 | 0 | 78 |
Rumus konversinya: indeks positif = panjang array + indeks negatif. Untuk array N elemen, indeks negatif yang valid berada pada rentang -N sampai -1; di luar rentang itu NumPy memunculkan IndexError yang sama seperti dibahas pada Chapter Indexing Array Satu Dimensi.
Langkah Negatif dan Pembalikan Urutan #
Parameter step pada slicing (Chapter Slicing Array) juga menerima angka negatif. Langkah negatif membuat slice berjalan dari kanan ke kiri:
import numpy as np
nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
print(nilai[::-1])
print(nilai[::-2])
print(nilai[-3:])Output yang Dihasilkan:
[81 73 95 88 69 92 85 78]
[81 95 69 85]
[95 73 81]Bedah baris demi baris:
nilai[::-1]:startdanstopdikosongkan sementarastepbernilai-1, sehingga seluruh elemen dibaca dari belakang ke depan. Ekspresi ini adalah idiom standar untuk membalik urutan array di NumPy.nilai[::-2]: langkah dua dari belakang → indeks 7, 5, 3, 1 →[81 95 69 85].nilai[-3:]:startnegatif denganstopkosong mengambil tiga elemen terakhir tanpa membalik urutan →[95 73 81].
Indeks Negatif pada Array Dua Dimensi #
Pada array multidimensi, setiap axis boleh memakai indeks negatif secara mandiri:
import numpy as np
penjualan = np.array([
[12, 15, 9, 20],
[8, 14, 11, 17],
[19, 6, 13, 10],
])
print(penjualan[-1])
print(penjualan[-1, -2])
print(penjualan[-3, -4])
print(penjualan[-2:, -2:])Output yang Dihasilkan:
[19 6 13 10]
13
12
[[11 17]
[13 10]]Bedah baris demi baris:
penjualan[-1]: satu indeks negatif pada array dua dimensi menghasilkan baris terakhir utuh,[19 6 13 10].penjualan[-1, -2]: baris terakhir, kolom kedua dari belakang →13.penjualan[-3, -4]: pada matriks 3 x 4,-3sama dengan baris pertama dan-4sama dengan kolom pertama, sehingga hasilnya12— ekuivalen denganpenjualan[0, 0].penjualan[-2:, -2:]: indeks negatif dipadukan dengan slicing → dua baris terakhir dan dua kolom terakhir, submatriks 2 x 2 di sudut kanan bawah.
Ringkasan bab ini:
-1selalu menunjuk elemen terakhir dan-Nmenunjuk elemen pertama; rentang valid-Nsampai-1.- Konversi ke indeks positif: indeks positif = panjang array + indeks negatif.
stepnegatif sepertia[::-1]membalik urutan, dan trik ini bekerja per axis pada array multidimensi.