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.dot untuk dua vektor 1-D yang menghasilkan satu scalar;
  • tafsiran geometrisnya lewat tanda hasil;
  • np.dot untuk array 2-D yang setara dengan perkalian matriks;
  • peran dot product sebagai penghitung tiap entri di dalam A @ B.

Dot product dua vektor #

python
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:

text
59000
59000
  1. Baris 3-4: dua array 1-D dengan panjang sama, yaitu (3,).
  2. Baris 5 (np.dot(harga, jumlah)): NumPy mengalikan pasangan elemen seposisi — 2*15000, 3*8000, 1*5000 — lalu menjumlahkan semuanya menjadi satu angka: 59000.
  3. Baris 6-7: output menunjukkan 59000 dua kali — hasil np.dot dan perhitungan manual yang ditulis eksplisit sebagai pembanding.
  4. Hasilnya scalar: berbeda dengan harga * jumlah yang menghasilkan array (3,), np.dot menyusutkan 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.
python
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:

text
5
0
-5
  1. Baris 5 (np.dot(a, b)): 2*1 + 1*3 = 5 — hasil positif, kedua vektor mengarah ke arah yang mirip.
  2. Baris 6-8: vektor sumbu x dan sumbu y selalu tegak lurus, dan dot product-nya memang 0 apa pun panjang masing-masing.
  3. 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 #

python
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:

text
[[19 22]
 [43 50]]
True

Untuk 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.dotBentuk hasilContoh di bab ini
(n,) dan (n,)scalar59000
(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 #

python
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:

text
19
19
43
43
  1. Baris 7 (C = A @ B): hasil perkalian matriks disimpan ke variabel C.
  2. Baris 8-9: entri C[0, 0] bernilai 19, dan np.dot(A[0], B[:, 0]) — dot product antara baris ke-0 dari A dan kolom ke-0 dari B — juga 19.
  3. Baris 10-11: pola yang sama berlaku untuk entri C[1, 0] dengan baris ke-1 dari A; keduanya 43.
  4. 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.