Dalam pekerjaan analisis data sehari-hari, kita sering hanya membutuhkan satu angka dari sekumpulan data: nilai ujian satu mahasiswa, harga satu produk, atau stok satu gudang. Menyalin seluruh array hanya untuk membaca satu nilai jelas boros memori dan waktu. NumPy menyediakan mekanisme paling dasar untuk keperluan tersebut: indexing dengan tanda kurung siku, a[i].
Bab ini membahas akses satu elemen pada array: cara penulisannya, apa yang sebenarnya dikembalikan NumPy di balik notasi tersebut, dan bagaimana penugasan ke satu indeks mengubah isi array. Pemahaman ini menjadi fondasi sebelum kita melanjutkan ke rentang indeks, array multidimensi, dan slicing pada bab-bab berikutnya.
Indeks dan Akses Satu Elemen #
NumPy menomori elemen array satu dimensi mulai dari 0. Notasi a[i] membaca elemen pada indeks i dari array a. Kita gunakan array nilai berisi delapan nilai ujian sebagai contoh berjalan:
import numpy as np
nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
print(nilai[0])
print(nilai[3])
print(nilai[7])Output yang Dihasilkan:
78
69
81Mari kita bedah baris demi baris:
- Baris 3 (
nilai = np.array(...)): fungsinp.array()membuat array satu dimensi dengan delapan elemen bertipeint64yang tersusun berurutan di dalam buffer memori. - Baris 4 (
print(nilai[0])): NumPy membaca sel pada indeks0, yaitu elemen pertama, lalu menghasilkan78. - Baris 5 (
print(nilai[3])): indeks3menunjuk elemen keempat, sehingga tercetak69. - Baris 6 (
print(nilai[7])): indeks terakhir yang valid untuk array delapan elemen adalah7, bukan8.
Pemetaan indeks ke nilai dapat kita ringkas pada tabel berikut:
| Indeks | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| Nilai | 78 | 85 | 92 | 69 | 88 | 95 | 73 | 81 |
Hasil Akses Berupa Scalar, Bukan Array #
Pada list Python, lst[0] mengembalikan objek int biasa. Pada array NumPy, hasil a[0] berupa scalar NumPy — satu nilai yang dibaca langsung dari satu sel memori array dan dibungkus sebagai objek bertipe sama dengan dtype array. NumPy tidak menyalin array dan tidak membuat array satu elemen baru; operasi ini hanya menyentuh satu sel.
import numpy as np
nilai = np.array([78, 85, 92, 69, 88])
elemen = nilai[2]
print(elemen)
print(type(elemen))
print(elemen.ndim)Output yang Dihasilkan:
92
<class 'numpy.int64'>
0Bedah baris demi baris:
- Baris 4 (
elemen = nilai[2]): NumPy membaca satu sel pada posisi indeks2dari buffer array. Hasilnya scalarnumpy.int64bernilai92— bukan salinan array dan bukan pula array satu elemen. - Baris 5 (
print(elemen)): scalar dicetak sebagai angka biasa,92. - Baris 6 (
print(type(elemen))): tipe hasilnya<class 'numpy.int64'>, mengikuti dtype array, bukanintbawaan Python. - Baris 7 (
print(elemen.ndim)): scalar tidak memiliki dimensi, sehinggandimbernilai0danshape-nya berupa tuple kosong().
Karena nilainya dibaca dari memori array, hasil akses ini dapat diibaratkan jendela ke satu sel memori. Namun perlu digarisbawahi: scalar yang telah tercipta berdiri sendiri sebagai nilai. Perubahan pada array setelah proses pembacaan tidak mengubah scalar yang telah kita simpan di variabel:
import numpy as np
nilai = np.array([10, 20, 30])
elemen = nilai[0]
nilai[0] = 99
print(elemen)
print(nilai[0])Output yang Dihasilkan:
10
99Baris elemen = nilai[0] membaca sel pertama dan menyimpan nilai 10 sebagai snapshot. Ketika nilai[0] = 99 menulis 99 ke sel yang sama, variabel elemen tetap bernilai 10 karena scalar tersebut tidak lagi terhubung ke buffer array. Pembacaan ulang lewat nilai[0] barulah menghasilkan 99. “Jendela hidup” yang tetap mengikuti perubahan array diperoleh lewat slicing, dan akan dibahas lebih lanjut pada Chapter View vs Copy.
Mengubah Elemen dengan Penugasan #
Akses satu indeks juga menjadi jalur untuk menulis. Penugasan a[i] = x menulis nilai x langsung ke sel memori pada indeks i, sehingga array berubah di tempat (in place):
import numpy as np
nilai = np.array([78, 85, 92, 69, 88])
print(nilai)
nilai[2] = 95
print(nilai)
nilai[2] += 5
print(nilai)Output yang Dihasilkan:
[78 85 92 69 88]
[78 85 95 69 88]
[ 78 85 100 69 88]Bedah baris demi baris:
- Baris 5 (
nilai[2] = 95): interpreter menulis95ke sel indeks2; elemen lain tidak tersentuh. - Baris 7 (
nilai[2] += 5): NumPy membaca sel indeks2(bernilai 95), menjumlahkan dengan5, lalu menulis kembali100ke sel yang sama. - Perhatikan spasi pada output: NumPy menyelaraskan kolom angka, sehingga array ketiga tampil dengan spasi tambahan di depan.
Tiga poin utama bab ini:
a[i]membaca satu elemen, dan indeks dimulai dari0.- Hasilnya scalar NumPy (misal
numpy.int64) yang dibaca dari satu sel memori, bukan salinan array. a[i] = xmenulis ke sel tersebut dan mengubah array di tempat.