Bài 10: Broadcast – Numpy trong Python

Trang chủ » Training » Bài 10: Broadcast – Numpy trong Python
23/02/2022 Training 36 viewed
Thuật ngữ broadcast đề cập đến khả năng của NumPy để xử lý các mảng có hình dạng khác nhau trong các phép toán số học. Các phép toán số học trên mảng thường được thực hiện trên các phần tử tương ứng. Nếu hai mảng có hình dạng hoàn toàn giống nhau thì các thao tác này được thực hiện trơn tru.
Ví dụ 1 :
import numpy as np 

a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print c
Kết quả :
[10   40   90   160]
Nếu kích thước của hai mảng không giống nhau, thì không thể thực hiện các thao tác giữa phần tử với phần tử. Tuy nhiên, các thao tác trên các mảng có hình dạng không giống nhau vẫn có thể thực hiện được trong NumPy, vì khả năng broadcasting. Mảng nhỏ hơn được phát tới kích thước của mảng lớn hơn để chúng có hình dạng tương thích.
Có thể broadcasting nếu các quy tắc sau được thỏa mãn:
  • Mảng có ndim nhỏ hơn mảng kia được thêm chữ ‘1’ trong shape.
  • Kích thước trong mỗi kích thước của shape đầu ra là tối đa của kích thước đầu vào trong kích thước đó.
  • Một đầu vào có thể được sử dụng trong tính toán, nếu kích thước của nó trong một thứ nguyên cụ thể khớp với kích thước đầu ra hoặc giá trị của nó chính xác là 1.
  • Nếu đầu vào có kích thước thứ nguyên là 1, thì mục nhập dữ liệu đầu tiên trong thứ nguyên đó sẽ được sử dụng cho tất cả các phép tính dọc theo thứ nguyên đó
Một tập hợp các mảng được cho là có thể broacast nếu các quy tắc trên tạo ra kết quả hợp lệ và một trong những điều sau là đúng:
  • Các mảng có hình dạng giống hệt nhau.
  • Mảng có cùng số kích thước và độ dài của mỗi thứ nguyên là độ dài chung hoặc 1.
  • Mảng có quá ít kích thước có thể có hình dạng của nó được thêm vào trước với kích thước có độ dài 1, do đó thuộc tính đã nêu ở trên là đúng.
Ví dụ 2 :
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 'First array:' 
print a 
print '\n'  
   
print 'Second array:' 
print b 
print '\n'  
   
print 'First Array + Second Array' 
print a + b
Kết quả :
First array:
[[ 0. 0. 0.]
 [ 10. 10. 10.]
 [ 20. 20. 20.]
 [ 30. 30. 30.]]

Second array:
[ 1. 2. 3.]

First Array + Second Array
[[ 1. 2. 3.]
 [ 11. 12. 13.]
 [ 21. 22. 23.]
 [ 31. 32. 33.]]
Hình sau minh họa cách mảng b được broadcast để tương thích với a.
Chia sẻ:
Tags:
TOP HOME