Trong bài viết này, chúng ta sẽ tìm hiểu về vectorization (vector hóa) và các kỹ thuật triển khai trong Python 3.x.
Vectorization là gì?
Vectorization là kỹ thuật thực hiện phép toán trên mảng/ma trận mà không dùng vòng lặp (loop). Thay vào đó, sử dụng hàm tối ưu hóa (thường viết bằng C/Fortran) giúp giảm đáng kể thời gian chạy.
Các phép toán phổ biến trên vector:
- Dot product (tích vô hướng): kết quả là một số (scalar)
- Outer product (tích ngoài): kết quả là ma trận vuông (n x n)
- Element-wise multiplication (nhân phần tử): nhân các phần tử cùng chỉ số, kích thước không đổi
Dot Product / Inner Product

Ví dụ so sánh hiệu năng
import time
import numpy as np
import array
# Tạo mảng lớn với module array
p = array.array('q')
for i in range(100000, 200000):
p.append(i)
q = array.array('q')
for i in range(200000, 300000):
q.append(i)
# Cách 1: Vòng lặp Python thuần (chậm)
tic = time.process_time()
dot_value = 0.0
for i in range(len(p)):
dot_value += p[i] * q[i]
toc = time.process_time()
print(f"Dot product (loop) = {dot_value}")
print(f"Thời gian: {1000*(toc - tic):.2f} ms")
# Cách 2: NumPy vectorization (nhanh)
n_tic = time.process_time()
n_dot_product = np.dot(p, q)
n_toc = time.process_time()
print(f"\nDot product (NumPy) = {n_dot_product}")
print(f"Thời gian: {1000*(n_toc - n_tic):.2f} ms")
Kết quả mẫu
Dot product (loop) = 3833313333350000.0 Thời gian: 116.52 ms Dot product (NumPy) = 3833313333350000 Thời gian: 2.54 ms
NumPy nhanh hơn ~45 lần nhờ vectorization!
Các hàm NumPy thường dùng
np.outer(a, b)- Tích ngoài của 2 vectornp.multiply(a, b)- Nhân phần tử (element-wise)np.dot(a, b)- Tích vô hướngnp.zeros((n, m))- Tạo ma trận 0 với shape (n, m)time.process_time()- Đo thời gian CPU của tiến trình hiện tại
Kết luận
Vectorization với NumPy là chìa khóa để viết Python hiệu năng cao cho tính toán khoa học và Machine Learning.