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:
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:
[[80 75 90 70]
[60 85 65 95]
[70 70 80 60]]
(3, 4)
2Mari kita bedah:
- 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 memunculkanValueErrorkarena bentuknya tidak seragam. - Baris 6 (
print(nilai)): matriks dicetak baris demi baris. Tanda kurung siku terluar memuat ketiga baris, dan jarak antarkolom dijaga agar sejajar. - Baris 7 (
nilai.shape): atributshapemenyatakan banyaknya baris lalu banyaknya kolom dalam tuple(3, 4). - Baris 8 (
nilai.ndim): jumlah dimensinya2— 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:
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:
65
[80 75 90 70]
[80 60 70]
60Tabel berikut merangkum tiap ekspresi:
| Ekspresi | Arti | Hasil |
|---|---|---|
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 terakhir | 60 |
- Baris 6 (
nilai[1, 2]): indeks ganda(1, 2)mengambil satu elemen baris ke-1 kolom ke-2, yaitu65. Pola ini disebut indexing array multidimensi dan dibahas tuntas pada Chapter Indexing Array Multidimensi. - Baris 7 (
nilai[0]): satu indeks saja menghasilkan satu baris utuh sebagai array 1-D. - Baris 8 (
nilai[:, 0]): tanda:berarti “semua baris”, sehingga hasilnya kolom pertama. Teknik ini dibahas lebih rinci pada Chapter Mengambil Baris dan Kolom. - Baris 9 (
nilai[2, -1]): indeks negatif menghitung dari belakang, dan-1menunjuk kolom terakhir.
Matriks istimewa: identity, diagonal, dan nol #
Tiga matriks istimewa muncul berulang kali dalam perhitungan:
| Matriks | Fungsi pembuat | Ciri |
|---|---|---|
| Matriks identity | np.eye(n) | diagonal utama berisi 1, elemen lain 0 |
| Matriks nol | np.zeros((m, n)) | semua elemen 0 |
| Matriks diagonal | np.diag(v) | hanya diagonal utama yang berisi nilai vektor v |
import numpy as np
identitas = np.eye(3)
print(identitas)
print(np.zeros((2, 3)))
print(np.diag([10, 20, 30]))Output yang Dihasilkan:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[0. 0. 0.]
[0. 0. 0.]]
[[10 0 0]
[ 0 20 0]
[ 0 0 30]]- Baris 3-4 (
np.eye(3)): matriks identity 3×3. Titik pada1.dan0.menandakan elemen bertipe float64. - Baris 5 (
np.zeros((2, 3))): bentuk yang diinginkan dikirim sebagai tuple(2, 3)— dua baris, tiga kolom. - Baris 6 (
np.diag([10, 20, 30])): vektor[10 20 30]diletakkan pada diagonal utama matriks 3×3, sisanya 0. Varian lainnp.diagdibahas 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:
import numpy as np
skala = np.array([[2, 0],
[0, 3]])
v = np.array([1, 1])
print(skala @ v)Output yang Dihasilkan:
[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.
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:
[[ 1 4]
[ 9 16]]
[[ 7 10]
[15 22]]
[[ 7 10]
[15 22]]
ndarray- Baris 4 (
m = np.matrix(a)): array 2×2 dibungkus menjadi objek matrix; dari titik ini operator*berubah makna. - Baris 5-6: pada ndarray,
a * amenghasilkan[[1 4] [9 16]]; pada matrix,m * mmenghasilkan perkalian matriks[[7 10] [15 22]]— dua jawaban berbeda untuk ekspresi yang tampak sama. - Baris 7-9 (konversi):
np.asarray(m)mengembalikan ndarray biasa (perhatikanndarraypada cetakan terakhir), sehingga polandarray @ ndarraymenjadi cara standar perkalian matriks yang kita pakai sepanjang course ini. Jika menjumpai kode lama berbasisnp.matrix, konversi tersebut adalah langkah migrasi pertama sebelum diperiksa lebih lanjut pada Chapter Migrasi NumPy 1.x ke 2.x.