Rank sebuah matriks adalah banyaknya baris (atau kolom) yang bebas linear — seberapa banyak informasi yang benar-benar dibawa matriks tersebut. Baris yang merupakan kelipatan atau gabungan baris lain tidak menambah informasi apa pun, dan rank mengabaikannya. Angka ini menentukan nasib banyak persoalan: apakah matriks bisa di-inverse, apakah sistem persamaan punya solusi tunggal, dan berapa banyak parameter bebas yang layak dipaskan ke data.
Di NumPy, rank dihitung dengan satu panggilan np.linalg.matrix_rank. Bab ini menunjukkan pemakaiannya pada matriks full-rank dan matriks singular, menghubungkan rank dengan keterbalikan matriks, lalu membongkar cara fungsi ini bekerja: menghitung SVD dan menghitung nilai singular yang melewati ambang batas.
Menghitung Rank dengan np.linalg.matrix_rank #
Contoh berikut membandingkan tiga matriks: matriks full-rank yang sudah kita kenal, matriks dengan baris duplikat, dan matriks identitas:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[1, 2],
[1, 2]])
C = np.eye(3)
print(np.linalg.matrix_rank(A))
print(np.linalg.matrix_rank(B))
print(np.linalg.matrix_rank(C))Output yang Dihasilkan:
2
1
3- Baris 3-4 (
A): baris[1, 2]dan[3, 4]tidak bisa saling diperoleh satu sama lain, sehingga keduanya bebas; rank2. - Baris 5-6 (
B): baris kedua[1, 2]duplikat baris pertama — informasinya cuma satu arah; rank1. - Baris 7 (
C): matriks identitas 3x3 punya tiga baris yang jelas-jelas bebas; rank3. - Baris 8-10:
matrix_rankmengembalikan bilangan bulat sederhana:2,1,3.
| Matriks | Rank | Alasan |
|---|---|---|
[[1, 2], [3, 4]] | 2 | kedua baris bebas linear |
[[1, 2], [1, 2]] | 1 | baris kedua duplikat baris pertama |
np.eye(3) | 3 | setiap baris bebas |
Rank, Determinan, dan Keterbalikan #
Untuk matriks persegi n x n berlaku kesetaraan yang penting: matriks bisa di-inverse tepat ketika rank-nya n (full rank). Jika rank di bawah n, matriks menjadi singular — determinannya nol (Chapter Determinant), np.linalg.inv gagal (Chapter Inverse Matriks), dan np.linalg.solve menolak bekerja (Chapter Penyelesaian Sistem Persamaan Linear). Kita buktikan ketiga tanda itu sekaligus pada matriks B yang ber-rank 1:
import numpy as np
B = np.array([[1, 2],
[1, 2]])
print(np.linalg.det(B))
try:
np.linalg.solve(B, np.array([1.0, 2.0]))
except np.linalg.LinAlgError as e:
print("LinAlgError:", e)Output yang Dihasilkan:
0.0
LinAlgError: Singular matrix- Baris 5 (
print(np.linalg.det(B))): determinant0.0— ciri khas matriks yang baris-barisnya bergantung. - Baris 6-9 (blok
try/except):solvedibungkustry/exceptkarena kegagalannya sudah pasti; pesanLinAlgError: Singular matrixdicetak agar output tetap deterministik.
Rank dari SVD dan Pengaruh Parameter tol #
Di balik layar, matrix_rank menghitung SVD (Chapter Singular Value Decomposition) lalu menghitung banyaknya nilai singular yang melewati ambang batas. Ambang default-nya S.max() * max(bentuk) * epsilon mesin — rumus yang kita coba sendiri pada bab sebelumnya. Parameter tol bisa kita kirim sendiri bila definisi “kecil” perlu disesuaikan:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
U, S, Vh = np.linalg.svd(A)
tol = S.max() * max(A.shape) * np.finfo(S.dtype).eps
print((S > tol).sum())
D = np.array([[1e-08, 0.0],
[0.0, 1.0]])
print(np.linalg.matrix_rank(D))
print(np.linalg.matrix_rank(D, tol=1e-04))Output yang Dihasilkan:
2
2
1- Baris 5-6: ambil nilai singular
Adan hitung ambangtoldengan rumus yang sama dipakaimatrix_rank. - Baris 7 (
(S > tol).sum()): hitungan manual menghasilkan2— identik denganmatrix_rank(A)pada bab sebelumnya. - Baris 8-9 (
D): matriks diagonal dengan entri1e-08dan1.0. Nilai singularnya adalah1.0dan1e-08. - Baris 10: dengan ambang default (
~4.4e-16),1e-08masih dianggap informasi sungguhan; rank2. - Baris 11: dengan
tol=1e-04, entri1e-08dianggap derau; rank1.
Kapan kita perlu mengatur tol sendiri? Tiga situasi yang umum:
- Data buatan atau eksak (rumus, matriks identitas): ambang default sudah tepat.
- Hasil pengukuran dengan derau: nilai singular kecil bisa jadi bekas derau sensor; pilih
toldi atas dugaan besar derau. - Skala data ekstrem (sangat besar atau sangat kecil): normalisasikan data, atau kirim
tolrelatif terhadap skala tersebut.
Rank yang rendah berarti sistem sebenarnya punya lebih sedikit persamaan bebas daripada kelihatannya — dan itulah alasan persoalan dunia nyata sering tidak punya solusi eksak sama sekali. Cara menemukan solusi terbaik yang mungkin untuk sistem semacam itu dibahas pada Chapter Least Squares.