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:

python
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:

text
[[1 2 3]
 [4 5 6]]
shape: (2, 3)
a[1, 2] = 6
  1. Baris 3 (np.array([[1, 2, 3], [4, 5, 6]])): list pertama menjadi baris 0, list kedua menjadi baris 1.
  2. Baris 5 (a.shape): (2, 3) berarti dua baris (axis 0) dan tiga kolom (axis 1).
  3. Baris 6 (a[1, 2]): indeks pertama memilih baris ke-2 ([4 5 6]), indeks kedua memilih kolom ke-3 di baris tersebut, hasilnya 6.

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:

python
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:

text
[[1 2 3]
 [4 5 6]]
shape awal : (6,)
shape baru : (2, 3)
  1. Baris 4 (a.reshape(2, 3)): enam elemen array 1-D ditata menjadi 2 baris × 3 kolom; angka diisi baris demi baris, sehingga 1, 2, 3 mendarat di baris pertama.
  2. Baris 6-7 (a.shape dan b.shape): a tetap (6,), sedangkan b menjadi (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):

python
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:

text
shape: (2, 3, 4)
ndim : 3
23
[[12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]
  1. Baris 3 (np.arange(24).reshape(2, 3, 4)): deret 0–23 (tepat 24 elemen) ditata menjadi 2 foto × 3 baris × 4 kolom.
  2. Baris 7 (foto[1, 2, 3]): foto ke-2, baris ke-3, kolom ke-4 — nilainya 23, elemen terakhir dari deret.
  3. 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 tupleAxisMakna pada contoh fotoIndeks valid
angka pertamaaxis 0foto ke berapa0–1
angka keduaaxis 1baris ke berapa0–2
angka ketigaaxis 2kolom ke berapa0–3