Chuẩn hóa Ma trận bằng Broadcasting không vòng lặp
Trong tiền xử lý ảnh và tính toán embedding của mô hình học sâu, hàng triệu vector phải được chuẩn hóa về độ dài đơn vị. Việc dùng vòng lặp for trong Python khiến thời gian xử lý c…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: numpy-array-strides-memory.
Nội dung đề bài
Mục tiêu kiến thức
- Nắm vững cơ chế so khớp kích thước từ phải sang trái (Trailing Dimensions).
- Ứng dụng
keepdims=Trueđể tự động phát sóng (broadcast) phép chia vector cho ma trận. - Tránh chia cho 0 bằng hằng số ổn định số học ε (epsilon).
Mô tả bài toán
Trong tiền xử lý ảnh và tính toán embedding của mô hình học sâu, hàng triệu vector phải được chuẩn hóa về độ dài đơn vị. Việc dùng vòng lặp for trong Python khiến thời gian xử lý chậm hơn hàng trăm lần so với vector hóa bằng broadcasting.
Yêu cầu
Viết hàm broadcast_normalize(matrix: np.ndarray, axis: int = 1, norm_type: str = "l2", eps: float = 1e-8) -> np.ndarray thực hiện:
- Tính độ dài chuẩn (norm) dọc theo trục
axis: "l1": Tổng giá trị tuyệt đối ∑ |x|."l2": Căn bậc hai tổng bình phương √(∑ x2)."max": Giá trị tuyệt đối lớn nhất max |x|.- Cộng ε vào mẫu số: denominator = norm + ε.
- Dùng broadcasting chia ma trận gốc cho mẫu số mà tuyệt đối không dùng vòng lặp
for. - Trả về ma trận chuẩn hóa kiểu
float64cùng shape với ma trận đầu vào.
import numpy as np
def broadcast_normalize(matrix: np.ndarray, axis: int = 1, norm_type: str = "l2", eps: float = 1e-8) -> np.ndarray:
passInput
- Hàm
broadcast_normalize(matrix,axis,norm_type,eps): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
broadcast_normalize: Trả về kết quả kiểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
mat = np.array([[3.0, 4.0], [1.0, 1.0]])
broadcast_normalize(mat, axis=1, norm_type='l2', eps=0.0)Output
[[0.6 , 0.8 ],
[0.7071, 0.7071]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
mat = np.array([[2.0, 6.0], [2.0, 2.0]])
broadcast_normalize(mat, axis=0, norm_type='l1', eps=0.0)Output
[[0.5 , 0.75],
[0.5 , 0.25]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Ý tưởng chính & Kiến thức cốt lõi: Broadcasting trong NumPy
Cho phép thực hiện các phép toán số học giữa các mảng có kích thước khác nhau mà không cần tốn bộ nhớ sao chép dữ liệu, tăng tốc độ tính toán gấp hàng chục lần so với vòng lặp Python.
- Hai chiều tương thích nếu chúng bằng nhau hoặc một trong hai bằng 1.
- Dóng hàng các chiều từ phải qua trái (trailing dimensions).
- Sử dụng keepdims=True khi tính mean hoặc norm dọc theo trục để duy trì số chiều cho phép chia broadcasting.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
