Broadcasting cho phép tính toán giữa hai mảng khác shape mà không cần sao chép. NumPy so sánh shape từ phải sang trái; hai chiều tương thích khi bằng nhau hoặc một trong hai bằng 1 (chiều bằng 1 được "kéo giãn").
X = np.ones((4, 3)) # 4 mẫu, 3 đặc trưng
mu = X.mean(axis=0) # shape (3,)
X - mu # (4,3) - (3,) → (4,3): trừ mean cho mỗi hàng
row_max = X.max(axis=1, keepdims=True) # (4, 1)
X - row_max # (4,3) - (4,1) → (4,3): trừ max của từng hàng
# Khoảng cách mọi cặp điểm, không vòng lặp:
A = np.random.rand(5, 2); B = np.random.rand(3, 2)
diff = A[:, None, :] - B[None, :, :] # (5,1,2) - (1,3,2) → (5,3,2)
D = np.sqrt((diff ** 2).sum(-1)) # (5, 3)None (hoặc np.newaxis) thêm một chiều độ dài 1 — công cụ chính để "căn" hai mảng cho broadcasting. keepdims=True giữ lại chiều đã gộp với độ dài 1 cũng vì lý do này. Đây chính là mẹo trong softmax ổn định số: x - x.max(axis=-1, keepdims=True).
?Phép (8, 1, 5) + (3, 1) cho kết quả shape gì?
Luyện tập ngay
Viết code và chấm tự động — có trợ lý AI gợi ý khi bí.