Seberapa besar sebuah vektor? Pertanyaan itu muncul di banyak pekerjaan sehari-hari: jarak dua lokasi di peta, ukuran galat antara prediksi dan nilai sebenarnya, atau batasan pada bobot sebuah model. Ukuran formalnya disebut norm, dan NumPy menghitungnya lewat np.linalg.norm dari submodul np.linalg (lihat Chapter Pengenalan numpy.linalg). Satu fungsi melayani beberapa jenis norm sekaligus lewat parameter ord.
Norm L2: Panjang Euclidean #
Norm L2 adalah panjang vektor menurut teorema Pythagoras: akar dari jumlah kuadrat seluruh komponennya. Bentuk inilah pilihan default np.linalg.norm:
import numpy as np
v = np.array([3.0, 4.0])
print(np.linalg.norm(v))
manual = np.sqrt((v**2).sum())
print(manual)
print(np.array_equal(np.linalg.norm(v), manual))
w = np.array([1.5, -2.0, 3.5])
print(np.linalg.norm(w))
print(np.array_equal(np.linalg.norm(w), np.sqrt((w**2).sum())))Output yang Dihasilkan:
5.0
5.0
True
4.301162633521313
TrueBedah baris demi baris:
- Baris 4 (
np.linalg.norm(v)): tanpaord, NumPy menghitung L2:sqrt(9 + 16) = 5.0. - Baris 5-6 (
manual): rumus L2 ditulis eksplisit — kuadratkan tiap elemen, jumlahkan, akarkan — dan menghasilkan5.0juga. - Baris 7 (
np.array_equal(...)):Trueberarti kedua nilai sama persis sampai bit terakhir, bukan sekadar mendekati. - Baris 9-11 (
w): norm bekerja pada dimensi berapa pun; untukwhasilnya4.301162633521313dan tetap identik dengan perhitungan manual.
Untuk perbandingan hasil float secara umum — misalnya antara dua rumus yang urutan operasinya berbeda — np.isclose tetap pilihan yang lebih aman daripada kesetaraan mutlak.
Norm L1 dan Linf: Parameter ord #
Parameter ord mengganti definisi norm. Dua pilihan yang paling sering dipakai selain L2: ord=1 menjumlahkan nilai mutlak semua komponen, dan ord=np.inf mengambil nilai mutlak terbesar:
import numpy as np
v = np.array([3.0, 4.0])
print(np.linalg.norm(v, 1))
print(np.linalg.norm(v, np.inf))
print(np.linalg.norm(v, 2))Output yang Dihasilkan:
7.0
4.0
5.0Bedah baris demi baris:
- Baris 4 (
ord=1):|3| + |4| = 7.0— norm L1. - Baris 5 (
ord=np.inf):max(|3|, |4|) = 4.0— norm Linf. - Baris 6 (
ord=2): menuliskan default secara eksplisit; hasil tetap5.0.
Tabel berikut merangkum ketiganya:
ord | Nama | Rumus untuk vektor v | Nilai untuk [3, 4] | Lazim dipakai untuk |
|---|---|---|---|---|
1 | Norm L1 | sum(abs(v)) | 7.0 | total deviasi absolut |
2 (default) | Norm L2 | sqrt(sum(v**2)) | 5.0 | jarak Euclidean |
np.inf | Norm Linf | max(abs(v)) | 4.0 | deviasi terbesar satu komponen |
Norm Matriks: Frobenius #
Untuk input 2-D, default np.linalg.norm bukan “panjang kolom” melainkan norm Frobenius: akar jumlah kuadrat seluruh elemen matriks. Anggap saja norm L2 yang diterapkan seolah seluruh elemen matriks diratakan menjadi satu vektor panjang:
import numpy as np
A = np.array([[1.0, 2.0],
[3.0, 4.0]])
print(np.linalg.norm(A))
print(np.sqrt((A**2).sum()))
print(np.array_equal(np.linalg.norm(A), np.sqrt((A**2).sum())))
print(np.linalg.norm(A, "fro"))Output yang Dihasilkan:
5.477225575051661
5.477225575051661
True
5.477225575051661Bedah baris demi baris:
- Baris 5 (
np.linalg.norm(A)): default untuk matriks adalah Frobenius:sqrt(1 + 4 + 9 + 16) = sqrt(30) = 5.477225575051661. - Baris 6-7: rumus manual
sqrt((A**2).sum())memberi nilai yang sama persis;Truemenegaskannya. - Baris 8 (
"fro"): string"fro"menuliskan pilihan Frobenius secara eksplisit — hasilnya identik dengan baris 5.
Norm matriks lain juga tersedia lewat ord: ord=2 memberi norm spektral (nilai singular terbesar, terkait Chapter Singular Value Decomposition), sedangkan ord=1 dan ord=np.inf pada matriks berarti jumlah kolom terbesar dan jumlah baris terbesar.
Studi Kasus: Jarak Dua Titik #
Pemakaian norm yang paling sering terasa langsung adalah jarak. Jarak Euclidean antara dua titik adalah norm L2 dari selisih keduanya — tanpa perlu rumus terpisah:
import numpy as np
gudang_a = np.array([2.0, 3.0])
gudang_b = np.array([5.0, 7.0])
selisih = gudang_b - gudang_a
print(selisih)
print(np.linalg.norm(selisih))Output yang Dihasilkan:
[3. 4.]
5.0Bedah baris demi baris:
- Baris 5 (
selisih = gudang_b - gudang_a): pengurangan array bekerja elemen-demi-elemen dan menghasilkan vektor perpindahan[3. 4.]. - Baris 7 (
np.linalg.norm(selisih)): panjang vektor perpindahan itu adalah jarak5.0— vektor yang sama persis dengan contoh pada bagian pertama bab ini.
Pola “norm dari selisih” dipakai di banyak tempat:
- Galat prediksi:
np.linalg.norm(prediksi - aktual)sebagai ukuran kesalahan total sebuah model. - Regularisasi: L1 mendorong bobot model menjadi nol persis, L2 mendorong seluruh bobot tetap kecil.
- Deteksi anomali: titik dengan norm deviasi terbesar dari rata-rata menjadi kandidat data tidak lazim.