Dot product — atau perkalian titik — menghasilkan satu angka dari dua vektor: kalikan pasangan elemen pada posisi yang sama, lalu jumlahkan semuanya. Operasi sesederhana ini muncul di mana-mana: menghitung total belanja dari daftar harga dan daftar jumlah, mengukur kemiripan dua vektor, dan menjadi bata penyusun perkalian matriks.
NumPy menyediakan fungsi np.dot. Bab ini membahas empat hal:
np.dotuntuk dua vektor 1-D yang menghasilkan satu scalar;- tafsiran geometrisnya lewat tanda hasil;
np.dotuntuk array 2-D yang setara dengan perkalian matriks;- peran dot product sebagai penghitung tiap entri di dalam
A @ B.
Dot product dua vektor #
import numpy as np
harga = np.array([15000, 8000, 5000])
jumlah = np.array([2, 3, 1])
total = np.dot(harga, jumlah)
print(total)
print(2*15000 + 3*8000 + 1*5000)Output yang Dihasilkan:
59000
59000- Baris 3-4: dua array 1-D dengan panjang sama, yaitu
(3,). - Baris 5 (
np.dot(harga, jumlah)): NumPy mengalikan pasangan elemen seposisi —2*15000,3*8000,1*5000— lalu menjumlahkan semuanya menjadi satu angka:59000. - Baris 6-7: output menunjukkan
59000dua kali — hasilnp.dotdan perhitungan manual yang ditulis eksplisit sebagai pembanding. - Hasilnya scalar: berbeda dengan
harga * jumlahyang menghasilkan array(3,),np.dotmenyusutkan hasil menjadi satu bilangan.
Hasil yang sama diperoleh lewat kombinasi chapter sebelumnya: np.sum(harga * jumlah) — kalikan elemen dulu, baru jumlahkan. np.dot menggabungkan dua langkah itu menjadi satu panggilan.
Tafsiran geometris: panjang dan sudut #
Dalam geometri, dot product mengaitkan panjang kedua vektor dengan sudut di antara keduanya: a·b = |a| |b| cos θ. Untuk memakai np.dot kita tidak perlu trigonometri; tanda hasilnya sudah memberi informasi arah:
- positif — sudut antara kedua vektor lancip; keduanya cenderung searah;
- nol — kedua vektor tegak lurus;
- negatif — sudutnya tumpul; keduanya cenderung berlawanan arah.
import numpy as np
a = np.array([2, 1])
b = np.array([1, 3])
print(np.dot(a, b))
sumbu_x = np.array([1, 0])
sumbu_y = np.array([0, 2])
print(np.dot(sumbu_x, sumbu_y))
print(np.dot(np.array([3, 2]), np.array([-1, -1])))Output yang Dihasilkan:
5
0
-5- Baris 5 (
np.dot(a, b)):2*1 + 1*3 = 5— hasil positif, kedua vektor mengarah ke arah yang mirip. - Baris 6-8: vektor sumbu x dan sumbu y selalu tegak lurus, dan dot product-nya memang
0apa pun panjang masing-masing. - Baris 9:
[3, 2]dan[-1, -1]menghasilkan-5— keduanya condong berlawanan arah.
Panjang vektor (|a|) dihitung dengan np.linalg.norm dan dibahas khusus pada Chapter Norm dan Magnitude.
np.dot untuk array 2-D #
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print(np.dot(A, B))
print(np.array_equal(np.dot(A, B), A @ B))Output yang Dihasilkan:
[[19 22]
[43 50]]
TrueUntuk array 2-D, np.dot(A, B) menjalankan perkalian matriks yang sama dengan A @ B — np.array_equal menyatakan True. Ringkasan perilaku np.dot berdasarkan bentuk operannya:
Bentuk operan np.dot | Bentuk hasil | Contoh di bab ini |
|---|---|---|
(n,) dan (n,) | scalar | 59000 |
(m, n) dan (n, p) | matriks (m, p) | [[19 22] [43 50]] |
Perbedaan np.dot dengan np.matmul baru muncul pada dimensi lebih dari dua; sepanjang array kita 2-D, keduanya dapat saling menggantikan.
Setiap entri perkalian matriks adalah dot product #
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
C = A @ B
print(C[0, 0])
print(np.dot(A[0], B[:, 0]))
print(C[1, 0])
print(np.dot(A[1], B[:, 0]))Output yang Dihasilkan:
19
19
43
43- Baris 7 (
C = A @ B): hasil perkalian matriks disimpan ke variabelC. - Baris 8-9: entri
C[0, 0]bernilai19, dannp.dot(A[0], B[:, 0])— dot product antara baris ke-0 dariAdan kolom ke-0 dariB— juga19. - Baris 10-11: pola yang sama berlaku untuk entri
C[1, 0]dengan baris ke-1 dariA; keduanya43. B[:, 0]: tanda:memilih semua baris pada kolom ke-0, sehingga kita memperoleh kolom pertama sebagai vektor. Tekniknya dibahas pada Chapter Mengambil Baris dan Kolom.
Inilah benang merahnya: perkalian matriks adalah kumpulan dot product — satu dot product untuk setiap sel hasil. Notasi einsum pada Chapter einsum merumuskan pola ini secara ringkas.