Skip to main content

Vector & Matrix Products

  • Cho 2 vector:
import numpy as np
import torch

# Vector 3 phần tử (Shape: (3,))
a_np = np.array([1, 2, 3])
b_np = np.array([4, 5, 6])

a_pt = torch.tensor([1, 2, 3])
b_pt = torch.tensor([4, 5, 6])

1. Element-wise Product (Tích từng phần tử)

  • Nhân từng phần tử ở vị trí tương ứng nhau

  • Kí hiệu: ab\mathbf{a} \odot \mathbf{b}

  • Input: 2 vector / ma trận cùng kích thước.

  • Output: vector / ma trận cùng kích thước input.

  • Công thức: ci=ai×bic_i = a_i \times b_i

# --- Python Syntax ---

# NumPy
res = a_np * b_np

# PyTorch
res = a_pt * b_pt

# Kết quả: [4, 10, 18] -> Shape (3,)

2. Dot Product (Tích vô hướng)

  • Tính tổng của tích từng phần tử

  • Kí hiệu: ab\mathbf{a} \cdot \mathbf{b} hoặc aTb\mathbf{a}^T\mathbf{b}

    • Quy ước trong đại số tuyến tính, khi nhắc đến vector mà không nói gì thêm, mặc định nó là vector cột. Do vậy dot product ở trên sẽ là transpose aba \cdot b (1x3) x (3x1).
  • Input: 2 vector cùng chiều dài.

  • Output: 1 con số (scalar)

  • Công thức: c=(ai×bi)c = \sum (a_i \times b_i)

# --- Python Syntax ---

# NumPy
res = a_np @ b_np
# Hoặc: np.dot(a_np, b_np)

# PyTorch
res = a_pt @ b_pt
# Hoặc: torch.dot(a_pt, b_pt)

# Kết quả: 32 (1*4 + 2*5 + 3*6) -> Shape ()

3. Outer Product

  • Phép nhân tạo ma trận từ 2 vector

  • Kí hiệu: ab\mathbf{a} \otimes \mathbf{b} hoặc abT\mathbf{a}\mathbf{b}^T

  • Input: 2 vector (có thể khác chiều dài), ví dụ có chiều (n x 1) & (m x 1).

  • Output: 1 ma trận có kích thước (n x m).

  • Công thức: Cij=ai×bjC_{ij} = a_i \times b_j

# --- Python Syntax ---

# NumPy
res = np.outer(a_np, b_np)

# PyTorch
res = torch.outer(a_pt, b_pt)

# Kết quả:
# [[ 4 5 6]
# [ 8 10 12]
# [12 15 18]]
# -> Shape (3, 3)

Cross Product (Tích có hướng)

  • Phép nhân tạo ra vector vuông góc với 2 vector ban đầu (ít dùng trong Machine Learning).

  • Kí hiệu: a×b\mathbf{a} \times \mathbf{b}

  • Input: 2 vector trong không gian 3D.

  • Output: 1 vector vuông góc.

# --- Python Syntax ---

# NumPy
res = np.cross(a_np, b_np)

# PyTorch (Lưu ý: Input phải là Float, không nhận Int)
res = torch.linalg.cross(a_pt.float(), b_pt.float())

# Kết quả: [-3, 6, -3] -> Shape (3,)