Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Vectorization trong Python: Tối ưu hiệu năng với NumPy

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

Vectorization trong Python: Tối ưu hiệu năng với NumPy

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 vector
  • np.multiply(a, b) - Nhân phần tử (element-wise)
  • np.dot(a, b) - Tích vô hướng
  • np.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.