Data nyata sering tersusun atas baris dan kolom: nilai ujian tiap siswa untuk tiap mata pelajaran, stok tiap produk di tiap gudang, atau penjualan tiap cabang per bulan. Susunan bilangan berbentuk persegi panjang seperti itu disebut matriks: kumpulan bilangan dengan m baris dan n kolom. NumPy merepresentasikan matriks sebagai array dua dimensi, yaitu ndarray yang atribut ndim-nya bernilai 2.

Chapter ini menata kosakata dasar yang akan dipakai sepanjang section Operasi Matriks:

  • baris, kolom, dan ordo m×n sebagai cara menyebut ukuran matriks;
  • pengambilan satu elemen dengan indeks ganda a[i, j];
  • tiga matriks istimewa: identity, matriks diagonal, dan matriks nol;
  • gambaran singkat matriks sebagai peta transformasi vektor.

Matriks sebagai array dua dimensi #

Cara paling langsung membuat matriks adalah memanggil np.array dengan list bersarang — list di dalam list — di mana setiap list bagian mewakili satu baris. Contoh berikut menyimpan nilai ujian tiga siswa untuk empat mata pelajaran:

python
import numpy as np

nilai = np.array([[80, 75, 90, 70],
                  [60, 85, 65, 95],
                  [70, 70, 80, 60]])
print(nilai)
print(nilai.shape)
print(nilai.ndim)

Output yang Dihasilkan:

text
[[80 75 90 70]
 [60 85 65 95]
 [70 70 80 60]]
(3, 4)
2

Mari kita bedah:

  1. Baris 3-5 (np.array(...)): NumPy membaca list bersarang dan menyimpulkan bentuk (3, 4) — tiga baris, empat kolom — dengan tipe elemen integer. Ketiga list bagian wajib sama panjang; bila ada yang berbeda, NumPy memunculkan ValueError karena bentuknya tidak seragam.
  2. Baris 6 (print(nilai)): matriks dicetak baris demi baris. Tanda kurung siku terluar memuat ketiga baris, dan jarak antarkolom dijaga agar sejajar.
  3. Baris 7 (nilai.shape): atribut shape menyatakan banyaknya baris lalu banyaknya kolom dalam tuple (3, 4).
  4. Baris 8 (nilai.ndim): jumlah dimensinya 2 — inilah penanda bahwa array ini adalah matriks, bukan vektor 1-D.

Baris, kolom, dan ordo m×n #

Ukuran matriks disebut ordo m×n, dibaca “m kali n”: m banyaknya baris dan n banyaknya kolom. Matriks nilai di atas berordo 3×4. Nomor baris dan kolom dimulai dari 0, sehingga elemen paling kiri atas ditulis nilai[0, 0]. Indeks pertama memilih baris, indeks kedua memilih kolom:

python
import numpy as np

nilai = np.array([[80, 75, 90, 70],
                  [60, 85, 65, 95],
                  [70, 70, 80, 60]])
print(nilai[1, 2])
print(nilai[0])
print(nilai[:, 0])
print(nilai[2, -1])

Output yang Dihasilkan:

text
65
[80 75 90 70]
[80 60 70]
60

Tabel berikut merangkum tiap ekspresi:

EkspresiArtiHasil
nilai[1, 2]baris ke-1, kolom ke-2 (satu angka)65
nilai[0]seluruh baris ke-0 (array 1-D)[80 75 90 70]
nilai[:, 0]semua baris pada kolom ke-0, yaitu kolom pertama[80 60 70]
nilai[2, -1]baris terakhir, kolom terakhir60
  1. Baris 6 (nilai[1, 2]): indeks ganda (1, 2) mengambil satu elemen baris ke-1 kolom ke-2, yaitu 65. Pola ini disebut indexing array multidimensi dan dibahas tuntas pada Chapter Indexing Array Multidimensi.
  2. Baris 7 (nilai[0]): satu indeks saja menghasilkan satu baris utuh sebagai array 1-D.
  3. Baris 8 (nilai[:, 0]): tanda : berarti “semua baris”, sehingga hasilnya kolom pertama. Teknik ini dibahas lebih rinci pada Chapter Mengambil Baris dan Kolom.
  4. Baris 9 (nilai[2, -1]): indeks negatif menghitung dari belakang, dan -1 menunjuk kolom terakhir.

Matriks istimewa: identity, diagonal, dan nol #

Tiga matriks istimewa muncul berulang kali dalam perhitungan:

MatriksFungsi pembuatCiri
Matriks identitynp.eye(n)diagonal utama berisi 1, elemen lain 0
Matriks nolnp.zeros((m, n))semua elemen 0
Matriks diagonalnp.diag(v)hanya diagonal utama yang berisi nilai vektor v
python
import numpy as np

identitas = np.eye(3)
print(identitas)
print(np.zeros((2, 3)))
print(np.diag([10, 20, 30]))

Output yang Dihasilkan:

text
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[[0. 0. 0.]
 [0. 0. 0.]]
[[10  0  0]
 [ 0 20  0]
 [ 0  0 30]]
  1. Baris 3-4 (np.eye(3)): matriks identity 3×3. Titik pada 1. dan 0. menandakan elemen bertipe float64.
  2. Baris 5 (np.zeros((2, 3))): bentuk yang diinginkan dikirim sebagai tuple (2, 3) — dua baris, tiga kolom.
  3. Baris 6 (np.diag([10, 20, 30])): vektor [10 20 30] diletakkan pada diagonal utama matriks 3×3, sisanya 0. Varian lain np.diag dibahas pada Chapter Diagonal dan Trace.

Matriks identity disebut istimewa karena menjadi elemen netral perkalian matriks: identitas @ A menghasilkan A kembali. Sifat itu akan terbukti setelah kita membahas Chapter Matrix Multiplication.

Matriks sebagai transformasi #

Cara pandang terakhir yang perlu kita pegang: matriks dapat dipandang sebagai peta yang mengubah sebuah vektor menjadi vektor lain. Matriks 2×2 berikut mengalikan komponen pertama vektor dengan dua dan komponen kedua dengan tiga:

python
import numpy as np

skala = np.array([[2, 0],
                  [0, 3]])
v = np.array([1, 1])
print(skala @ v)

Output yang Dihasilkan:

text
[2 3]

Vektor [1 1] dipetakan menjadi [2 3]. Operator @ pada contoh ini adalah perkalian matriks-vektor; mekanisme lengkapnya dibahas pada Chapter Matrix Multiplication. Dengan cara pandang ini, matriks bukan sekadar tabel angka, melainkan alat untuk menggeser, memutar, atau menskalakan data — fondasi grafika komputer dan banyak model pembelajaran mesin.

np.matrix: Legasi yang Sebaiknya Dihindari #

Selain ndarray, NumPy masih menyediakan kelas np.matrix. Kelas ini masih ada di NumPy 2.x dan tidak dihapus, tetapi dokumentasi resmi menandainya sebagai legasi yang tidak disarankan untuk kode baru. Dua alasannya: np.matrix memaksa array selalu berbentuk dua dimensi (array 1-D ikut diangkat menjadi matriks), dan kelas ini mengubah makna operator * menjadi perkalian matriks, berbeda dari ndarray yang memakai * untuk perkalian elemen-demi-elemen.

python
import numpy as np

a = np.array([[1, 2], [3, 4]])
m = np.matrix(a)
print(a * a)      # ndarray: * = perkalian elemen-demi-elemen
print(m * m)      # matrix: * = perkalian matriks
n = np.asarray(m)
print(n @ n)
print(type(n).__name__)

Output yang Dihasilkan:

text
[[ 1  4]
 [ 9 16]]
[[ 7 10]
 [15 22]]
[[ 7 10]
 [15 22]]
ndarray
  1. Baris 4 (m = np.matrix(a)): array 2×2 dibungkus menjadi objek matrix; dari titik ini operator * berubah makna.
  2. Baris 5-6: pada ndarray, a * a menghasilkan [[1 4] [9 16]]; pada matrix, m * m menghasilkan perkalian matriks [[7 10] [15 22]] — dua jawaban berbeda untuk ekspresi yang tampak sama.
  3. Baris 7-9 (konversi): np.asarray(m) mengembalikan ndarray biasa (perhatikan ndarray pada cetakan terakhir), sehingga pola ndarray @ ndarray menjadi cara standar perkalian matriks yang kita pakai sepanjang course ini. Jika menjumpai kode lama berbasis np.matrix, konversi tersebut adalah langkah migrasi pertama sebelum diperiksa lebih lanjut pada Chapter Migrasi NumPy 1.x ke 2.x.