Dot product memasangkan elemen dua vektor yang seposisi, lalu menjumlahkan hasil kalinya. Ada cara lain memasangkan dua vektor: mengalikan setiap elemen vektor pertama dengan setiap elemen vektor kedua — semua kombinasi pasangan, tanpa penjumlahan. NumPy menyediakan keduanya sebagai np.inner dan np.outer.
Keduanya menerima vektor 1-D sebagai input utama, tetapi hasilnya bergerak ke arah berlawanan:
np.innermenyusutkan dua vektor menjadi satu angka (scalar);np.outermengembangkannya menjadi tabel(n, m)berisi semua hasil kali pasangan.
Inner product: dot product dengan nama lain #
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.inner(a, b))
print(np.dot(a, b))
serupa = np.array([2, 4, 6])
print(np.inner(a, serupa))
berlawanan = np.array([1, 0, -1])
print(np.inner(a, berlawanan))Output yang Dihasilkan:
32
32
28
-2- Baris 5-6 (
np.innervsnp.dot):1*4 + 2*5 + 3*6 = 32, dan kedua fungsi memberi nilai sama — untuk dua vektor 1-D,np.innerdannp.dotidentik. - Baris 7-8:
serupaadalah kelipatan dua daria, sehingga arahnya sama; inner product-nya28, bernilai besar dan positif. - Baris 9-10:
berlawananmembuat hasilnya-2— tanda negatif menandakan kecenderungan arah berlawanan.
Inner product dipakai sebagai ukuran kemiripan arah dua vektor: makin besar nilainya dibanding panjang kedua vektor, makin searah keduanya; nol berarti tegak lurus. Tafsiran yang sama berlaku pada Chapter Dot Product — untuk vektor 1-D, keduanya memang operasi yang sama.
Perbedaan np.inner dan np.dot di dimensi lebih tinggi #
Pada array dengan dimensi lebih dari satu, keduanya berbeda: np.inner menjumlahkan hasil kali atas sumbu terakhir kedua array, sedangkan np.dot memakai sumbu terakhir array kiri dan sumbu kedua-terakhir array kanan:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print(np.inner(A, B))
print(np.dot(A, B))Output yang Dihasilkan:
[[17 23]
[39 53]]
[[19 22]
[43 50]]np.inner(A, B)[0, 1] dihitung dari baris ke-0 A dan baris ke-1 B: 1*7 + 2*8 = 23. Sebaliknya, np.dot(A, B)[0, 1] memakai baris ke-0 A dan kolom ke-1 B: 1*6 + 2*8 = 22. Untuk pekerjaan sehari-hari pada vektor 1-D, perbedaan ini tidak muncul — cukup diingat ketika array bertambah dimensinya.
Outer product: tabel semua kombinasi #
import numpy as np
a = np.array([1, 2, 3])
b = np.array([10, 20])
print(np.outer(a, b))
print(np.outer(a, b).shape)Output yang Dihasilkan:
[[10 20]
[20 40]
[30 60]]
(3, 2)- Baris 5 (
np.outer(a, b)): setiap elemenadikalikan dengan setiap elemenb, tanpa penjumlahan. Entri(i, j)pada hasil adalaha[i] * b[j]— baris pertama berisi1*10dan1*20, dan seterusnya. - Aturan bentuk: vektor
(3,)dipasangkan dengan vektor(2,)menghasilkan matriks(3, 2). Panjang kedua vektor tidak perlu sama. - Tanpa loop: tabel 3×2 itu setara dengan dua loop
forbersarang;np.outermenuliskannya dalam satu baris.
Penerapan: tabel perkalian dan kombinasi harga-jumlah #
import numpy as np
angka = np.arange(1, 6)
print(np.outer(angka, angka))
harga = np.array([15000, 24000, 8500])
jumlah = np.array([1, 2, 3])
print(np.outer(harga, jumlah))Output yang Dihasilkan:
[[ 1 2 3 4 5]
[ 2 4 6 8 10]
[ 3 6 9 12 15]
[ 4 8 12 16 20]
[ 5 10 15 20 25]]
[[15000 30000 45000]
[24000 48000 72000]
[ 8500 17000 25500]]- Tabel perkalian 1-5:
np.outerdariarange(1, 6)dengan dirinya sendiri menghasilkan tabel perkalian klasik; sel(i, j)berisi(i+1) * (j+1). - Kombinasi harga dan jumlah: sel
(i, j)berisi total belanja bila membelijumlah[j]unit produk yang harganyaharga[i]— seluruh kemungkinan terhitung sekaligus, tanpa satu baris loop pun.
Tabel berikut merangkum perbandingan keduanya:
| Aspek | np.inner | np.outer |
|---|---|---|
| Input utama | dua vektor 1-D | dua vektor 1-D |
| Syarat panjang | kedua vektor sama panjang | bebas |
| Bentuk hasil | scalar | matriks (n, m) |
| Operasi | kali seposisi, lalu jumlah | kali semua kombinasi pasangan |
| Tafsiran | kemiripan arah | tabel semua kombinasi |