Chúng ta biết các phép toán số học giữa các mảng khác nhau xảy ra bình thường nếu các mảng có kích thước bằng nhau hoặc kích thước cụ thể. Nhưng có những tình huống khi ta có thể lấy các mảng kích thước không bằng nhau và vẫn áp dụng các phép toán số học bằng cách mở rộng mảng nhỏ hơn bằng cách thêm '1' vào shape của nó. Về cơ bản, broadcasting mảng nghĩa là thay đổi shape của nó thành bất kỳ shape yêu cầu nào.
Quy tắc broadcasting mảng
- Mảng có ndim nhỏ hơn mảng kia sẽ được thêm '1' vào shape.
- Kích thước ở mỗi chiều của shape đầu ra là tối đa của các kích thước đầu vào ở chiều đó.
- Một đầu vào có thể dùng trong tính toán nếu kích thước ở chiều cụ thể khớp với kích thước đầu ra hoặc giá trị chính xác là 1.
- Nếu đầu vào có kích thước chiều là 1, mục dữ liệu đầu tiên ở chiều đó được dùng cho tất cả tính toán dọc theo chiều đó.
Ví dụ
Ví dụ dưới đây minh họa broadcasting xảy ra khi thao tác mảng sử dụng mảng NumPy.
import numpy as np
a = np.array([[0.0, 0.0, 0.0], [10.0, 10.0, 10.0], [20.0, 20.0, 20.0], [30.0, 30.0, 30.0]])
b = np.array([1.0, 2.0, 3.0])
print('Mảng thứ nhất:')
print(a)
print('\n')
print('Mảng thứ hai:')
print(b)
print('\n')
print('Mảng thứ nhất + Mảng thứ hai')
print(a + b)
Kết quả
Mảng thứ nhất: [[ 0. 0. 0.] [10. 10. 10.] [20. 20. 20.] [30. 30. 30.]] Mảng thứ hai: [1. 2. 3.] Mảng thứ nhất + Mảng thứ hai: [[ 1. 2. 3.] [11. 12. 13.] [21. 22. 23.] [31. 32. 33.]]