ai-003Đọc toàn bộ đề miễn phí

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…

AITrung bình30 phút

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ủ đề

numpybroadcastingvectorizationmatrix-normaxis-reduction

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 float64 cù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:
    pass

Input

  • 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ểu np.ndarray theo đú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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.