Memahami Pengindeksan pada NumPy

Artikel singkat ini bertujuan untuk memberi pemahaman tentang pengindeksan NumPy. Selain operasi matriks/array, (pemahaman) pengindeksan ini sangat penting untuk dapat memanipulasi atau mengoperasikan array. Beruntungnya, sebuah makalah ulasan baru di Nature [1] yang ditulis oleh kontributor NumPy menyinggung pengindeksan NumPy ini secarang singkat dan padat. Tulisan ini merupakan interpretasi bebas atas makalah tersebut dengan pendekatan IPython yang telah dikenalkan pada tulisan seri sebelumnya.

Memahami Bentuk (shape) NumPy Array

Pada tulisan sebelumnya telah dijelaskan cara mengubah bentuk (shape) dari sebuah NumPy array. Untuk mengubah bentuk array, kita harus bisa mengenali bentuk dari array itu sendiri. Bentuk array menentukan ukuran (jumlah elemen) pada tiap aksis [1].  Jumlah aksisnya (berapa sumbu) menentukan dimensi dari array tersebut. Sebagai contoh, array dengan bentuk (2, 3) merupakan array 1D. Gambar di bawah ini mengilustrasikan bentuk array 1D, 2D, 3D, dan ND.

Bentuk-bentuk (shape) array: 1D, 2D, dan 3D [2]

Bentuk-bentuk matriks/array di atas dapat dibagi sebagai berikut:

  • 0D array, contohnya skalar a = np.array(2).
  • 1D array, contohnya vektor dengan bentuk (2, ), (3, ), (4,).
  • 2D array, contohnya matriks berbentuk (3, 1), (2, 3), (3, 3).
  • 3D array, contohnya matriks berbentuk (3, 1, 1), (3, 2, 3), (4,3,2).
  • ND array, contohnya matrik berukuran (n, 4, 3, 2), (n, n, 4, 3, 2).

Untuk mengetahui bentuk array, perintah yang digunakan adalah x.shape dengan x adalah NumPy array. Untuk mengetahui dimensi array, perintah yang digunakan adalah x.ndim. Untuk mengetahui tipe data, perintah yang digunakan adalah x.dtype. Perhatikan screencast di bawah ini untuk menyegarkan kembali ingatan kita tentang NumPy array.


Screencast di atas jika diringkas, dapat diilustrasikan seperti gambar di bawah ini.

Konsep pengindeksan pada NumPy array. Gambar diadaptasi dari [1] dengan modifikasi. (http://creativecommons.org/licenses/by/4.0/)

Pengindeksan pada NumPy dapat dibagi menjadi dua, yakni pengindeksan yang hanya "melihat" data asli ("view") dan pengindeksan yang menyalin data asli ("copy"). Pengindeksan "view" adalah jika pengindeksan tersebut hanya untuk melihat irisan (slice) atau irisan dengan langkah tertentu (step) dari data asli. Misalnya, semua baris diindeks; semua kolom diindeks tapi dengan besar langkah 2, yakni (hasilnya) kolom 0 dan kolom 2. Pada NumPy, implementasi pengindeksan dengan melihat disimbolkan dengan tanda titik dua ":" untuk slice, sedangkan step dengan menambahkan jumlah step-nya. Misal, mengindeks semua kolom dan baris ketiga serta setelahnya, x[:, 2:]. Pengindeksan dengan menyalin data asli berlaku pada pengindeksan dengan mask, koordinat skalar (posisi data yang ingin diindeks), atau pengindeksan dengan matrik lain. Contoh pengindeksan ini ada di gambar di atas pada poin C, yakni x[x>9]..

Satu perintah atau fungsi yang belum dibahas pada screencast dan gambar di atas adalah strides. strides menghasilkan keluaran tuple [penjelasan sementara: ditandai dengan tanda kurung()], nilai pertama menunjukkan bytes yang dibutuhkan untuk berpindah baris, sedangkan nilai kedua adalah banyaknya bytes dalam satu elemen. Dari definisi tersebut terlihat bahwa stride berhubungan dengan tipe data yang digunakan. Terlihat dalam screencast ketika kita mengubah tipe data dari 'int64' menjadi 'int16' maka stride-nya juga berubah, yakni dari (24, 8) menjadi (6, 2). Pada tipe data terakhir hanya butuh 6 bytes untuk berpindah satu baris.

Demikian penjelasan singkat untuk memahami pengindeksan pada array NumPy. Silahkan baca referensi di bawah ini untuk penjelasan tambahan.

Bersambung ke seri selanjutnya: Vektorisasi.

Referensi

[1] C. R. Harris et al., “Array Programming with NumPy,” Nature, vol. 585, no. September, pp. 357–362, 2020.
[2] https://bagustris.blogspot.com/2019/09/memahami-sizeshape-numpy-array.html [Memahami size dan shape NumPy array]

Avatar

Bagus Tris Atmaja

Menyelesaikan sarjana (2009) dan magister (2012) di Teknik Fisika ITS. Gelar PhD diperoleh di bidang "Information Science" dari Japan Advanced Institute of Science and Technology (JAIST). Saat ini bekerja sebagai peneliti di Artificial Intelligence Research Center, AIST Tsukuba.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA Image

*