Data nyata jarang berhenti di satu baris. Nilai ujian satu kelas tersusun sebagai tabel (siswa × mata pelajaran), foto digital tersusun sebagai kotak piksel (baris × kolom), dan tumpukan foto menambah satu lapis lagi. NumPy menyebut jumlah tingkat penyusunan ini sebagai jumlah axis, dan tuple shape yang membacanya menjadi kunci memahami seluruh operasi multidimensi.
Bab ini melatih tiga hal:
- Membentuk array 2-D dari nested list dan mengubah bentuknya dengan
reshape(). - Membaca arti setiap angka pada tuple
shape. - Mengambil elemen dengan indeks bertingkat seperti
a[1, 2].
Membentuk array dua dimensi #
Nested list dengan panjang yang seragam menghasilkan array 2-D. Setiap list dalam menjadi satu baris:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print("shape:", a.shape)
print("a[1, 2] =", a[1, 2])Output yang Dihasilkan:
[[1 2 3]
[4 5 6]]
shape: (2, 3)
a[1, 2] = 6- Baris 3 (
np.array([[1, 2, 3], [4, 5, 6]])): list pertama menjadi baris 0, list kedua menjadi baris 1. - Baris 5 (
a.shape):(2, 3)berarti dua baris (axis 0) dan tiga kolom (axis 1). - Baris 6 (
a[1, 2]): indeks pertama memilih baris ke-2 ([4 5 6]), indeks kedua memilih kolom ke-3 di baris tersebut, hasilnya6.
Perhatikan bahwa a[1, 2] menuliskan kedua indeks dalam satu pasang kurung — cara ini lebih ringkas daripada gaya list Python a[1][2], meskipun keduanya menghasilkan nilai yang sama.
Penting juga untuk memahami urutan pengisian. NumPy membaca nested list baris demi baris, sehingga enam elemen [1, 2, 3, 4, 5, 6] tersusun di memori dalam urutan tersebut dan baris pertama mendapat bagian 1, 2, 3. Urutan bawaan ini dikenal sebagai row-major (C order) dan menjadi dasar perilaku reshape() pada bagian berikutnya.
Mengubah bentuk dengan reshape #
Method reshape() menata ulang urutan elemen yang sama menjadi bentuk lain tanpa mengubah datanya. Syaratnya, jumlah elemen sebelum dan setelah penataan harus sama:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)
print(b)
print("shape awal :", a.shape)
print("shape baru :", b.shape)Output yang Dihasilkan:
[[1 2 3]
[4 5 6]]
shape awal : (6,)
shape baru : (2, 3)- Baris 4 (
a.reshape(2, 3)): enam elemen array 1-D ditata menjadi 2 baris × 3 kolom; angka diisi baris demi baris, sehingga1, 2, 3mendarat di baris pertama. - Baris 6-7 (
a.shapedanb.shape):atetap(6,), sedangkanbmenjadi(2, 3).reshape()menghasilkan tampilan baru terhadap data yang sama, bukan salinan baru.
Bila total elemen tidak cocok — misalnya reshape(2, 4) untuk 6 elemen — NumPy memunculkan ValueError.
Membaca shape pada tiga dimensi #
Untuk memvisualisasikan array 3-D, bayangkan tumpukan dua foto hitam-putih kecil, masing-masing berukuran 3 baris × 4 kolom piksel. Bentuknya (2, 3, 4):
import numpy as np
foto = np.arange(24).reshape(2, 3, 4)
print("shape:", foto.shape)
print("ndim :", foto.ndim)
print(foto[1, 2, 3])
print(foto[1])Output yang Dihasilkan:
shape: (2, 3, 4)
ndim : 3
23
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]- Baris 3 (
np.arange(24).reshape(2, 3, 4)): deret 0–23 (tepat 24 elemen) ditata menjadi 2 foto × 3 baris × 4 kolom. - Baris 7 (
foto[1, 2, 3]): foto ke-2, baris ke-3, kolom ke-4 — nilainya23, elemen terakhir dari deret. - Baris 8 (
foto[1]): satu indeks saja menghasilkan seluruh foto kedua, berupa array 2-D 3 × 4.
Contoh di atas memperlihatkan pola berlapis yang konsisten: semakin sedikit indeks yang diberikan, semakin besar potongan yang dihasilkan. Memberikan tiga indeks menghasilkan satu angka, dua indeks menghasilkan satu baris, dan satu indeks menghasilkan satu foto utuh. Pola pemberkasan per axis ini berlaku untuk jumlah dimensi apa pun.
Tabel berikut merangkum arti tiap posisi pada tuple (2, 3, 4):
| Posisi di tuple | Axis | Makna pada contoh foto | Indeks valid |
|---|---|---|---|
| angka pertama | axis 0 | foto ke berapa | 0–1 |
| angka kedua | axis 1 | baris ke berapa | 0–2 |
| angka ketiga | axis 2 | kolom ke berapa | 0–3 |