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.

Konsep pengindeksan pada NumPy array. Gambar diadaptasi dari [1] dengan modifikasi. (http://creativecommons.org/licenses/by/4.0/)
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]