NumPy - Phát sóng

Thời hạn broadcastingđề 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

Đầu ra của nó như sau:

[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 phát sóng. Mảng nhỏ hơn làbroadcast vớ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ể phát sóng nếu các quy tắc sau được thỏa mãn:

  • Mảng với nhỏ hơn ndim hơn cái còn lại được thêm chữ '1' trong hình dạng của nó.

  • Kích thước trong mỗi kích thước của hình dạng đầ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à broadcastable 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, để thuộc tính đã nêu ở trên là đúng.

Chương trình sau đây cho thấy một ví dụ về phát só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

Đầu ra của chương trình này sẽ như sau:

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 phát sóng để tương thích với a.