Rate this post

Trong các phép toán, chúng ta có thể cần xem xét các mảng có hình dạng khác nhau. NumPy có thể thực hiện các operator như vậy khi có liên quan đến mảng các hình dạng khác nhau.

Các bài viết liên quan:

Ví dụ, nếu chúng ta xem xét phép toán nhân ma trận, nếu hình dạng của hai ma trận giống nhau thì phép toán này sẽ dễ dàng thực hiện. Tuy nhiên, chúng tôi cũng có thể cần phải hoạt động nếu hình dạng không tương tự.

Giới thiệu về Broadcasting trong NumPy

Broadcasting là một tính năng quan trọng trong NumPy cho phép bạn thực hiện các phép toán trên các mảng có kích thước khác nhau một cách tự động và linh hoạt. Nó cho phép NumPy mở rộng kích thước của một hoặc nhiều mảng để phù hợp với kích thước của các mảng khác trong phép toán.

Khi thực hiện phép toán giữa hai mảng, NumPy sẽ tự động thực hiện việc sao chép các giá trị để phù hợp với kích thước của mảng lớn hơn. Điều này giúp bạn thực hiện các phép toán trên các mảng có kích thước khác nhau mà không cần phải mở rộng hoặc thay đổi kích thước của chúng trước.

Xem thêm Cách cài đặt NumPy trên Python

Broadcasting trong NumPy dựa trên một số quy tắc để xác định cách sao chép dữ liệu và mở rộng kích thước mảng. Các quy tắc này giúp định nghĩa cách thức áp dụng các phép toán giữa các mảng có kích thước khác nhau một cách chính xác.

Sử dụng Broadcasting, bạn có thể thực hiện các phép toán như cộng, trừ, nhân, chia trên các mảng có kích thước và hình dạng khác nhau một cách thuận tiện và hiệu quả. Điều này rất hữu ích khi làm việc với dữ liệu đa chiều và giúp tăng tốc quá trình tính toán trong NumPy.

Broadcasting là một tính năng mạnh mẽ trong NumPy và nó đóng vai trò quan trọng trong việc xử lý dữ liệu đa chiều và thực hiện các phép toán trên chúng.

Hãy xem xét ví dụ sau để nhân hai mảng.

Thí dụ

import numpy as np  
a = np.array([1,2,3,4,5,6,7])  
b = np.array([2,4,6,8,10,12,14])  
c = a*b;  
print(c)  

Đầu ra:

Tuy nhiên, trong ví dụ trên, nếu chúng ta xem xét các mảng có hình dạng khác nhau, chúng ta sẽ nhận được lỗi như hình dưới đây.

Thí dụ

import numpy as np  
a = np.array([1,2,3,4,5,6,7])  
b = np.array([2,4,6,8,10,12,14,19])  
c = a*b;  
print(c)  

Đầu ra:

ValueError: không thể phát các toán hạng cùng với các hình (7,) (8,)

Trong ví dụ trên, chúng ta có thể thấy rằng hình dạng của hai mảng không giống nhau và do đó chúng không thể nhân với nhau. NumPy có thể thực hiện hoạt động như vậy bằng cách sử dụng khái niệm broadcast.

Trong broadcast, Array nhỏ hơn được mở rộng thành mảng lớn hơn để làm cho hình dạng giống nhau.

Xem thêm Numpy trong python

Cách hoạt động của Broadcasting trong NumPy

Broadcasting trong NumPy hoạt động bằng cách tự động mở rộng kích thước của các mảng để phù hợp với kích thước của các mảng khác trong phép toán. Điều này cho phép thực hiện các phép toán trên các mảng có kích thước và hình dạng khác nhau một cách tự nhiên.

NumPy sẽ áp dụng các quy tắc sau để xác định cách mở rộng kích thước và thực hiện phép toán:

  1. Quy tắc 1: Nếu hai mảng có số chiều khác nhau, mảng có số chiều thấp hơn sẽ được mở rộng bằng cách thêm các chiều có kích thước 1 vào đầu mảng.
  2. Quy tắc 2: Nếu kích thước của một chiều trong mảng là 1 và chiều tương ứng trong mảng khác là một giá trị khác 1, mảng có kích thước 1 sẽ được mở rộng bằng cách sao chép các giá trị để phù hợp với kích thước của mảng khác.
  3. Quy tắc 3: Nếu trong các chiều khác nhau của hai mảng, không có chiều nào có kích thước là 1, NumPy sẽ gây lỗi và không thể thực hiện Broadcasting.

Sau khi mở rộng kích thước của các mảng để có cùng kích thước, NumPy thực hiện các phép toán phần tử-wise trên các phần tử tương ứng của các mảng. Các phép toán này được thực hiện theo quy tắc tổng quát của phép toán NumPy cho các mảng có cùng kích thước.

Ví dụ, nếu bạn có một mảng 2 chiều (3×3) và một mảng 1 chiều (1×3), Broadcasting sẽ tự động mở rộng kích thước của mảng 1 chiều để có cùng kích thước với mảng 2 chiều. Sau đó, các phép toán phần tử-wise có thể được thực hiện giữa các phần tử tương ứng của hai mảng.

Broadcasting là một quyền năng mạnh mẽ trong NumPy cho phép bạn thao tác dữ liệu đa chiều một cách linh hoạt và hiệu quả. Nó loại bỏ nhu cầu phải mở rộng kích thước hoặc thay đổi hình dạng của các mảng trước khi thực hiện các phép toán, giúp tiết kiệm thời gian và tăng tốc độ xử lý dữ liệu.

Xem thêm String trong NumPy

Quy tắc broadcast

Có thể broadcast nếu thỏa mãn các trường hợp sau.

  • Mảng kích thước nhỏ hơn có thể được nối với ‘1’ trong hình dạng của nó.
  • Kích thước của mỗi dimension output là kích thước tối đa trong input dimension.
  • Một input có thể được sử dụng trong tính toán nếu kích thước của nó trong một dimension cụ thể khớp với kích thước output hoặc giá trị của nó chính xác là 1.
  • Nếu kích thước input là 1, thì mục nhập dữ liệu đầu tiên được sử dụng để tính toán dọc theo dimension.

Broadcast có thể được áp dụng cho các mảng nếu các quy tắc sau được thỏa mãn.

  • Tất cả các mảng đầu vào có cùng hình dạng.
  • Mảng có cùng số thứ nguyên và độ dài của mỗi thứ nguyên là độ dài chung hoặc 1.
  • Mảng có kích thước ít hơn có thể được nối với ‘1’ trong hình dạng của nó.

Hãy xem một ví dụ về broadcast.

Thí dụ

import numpy as np  
a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])  
b = np.array([2,4,6,8])  
print("\nprinting array a..")  
print(a)  
print("\nprinting array b..")  
print(b)  
print("\nAdding arrays a and b ..")  
c = a + b;  
print(c)  

Đầu ra:

Lưu ý khi sử dụng Broadcasting trong NumPy

Khi sử dụng Broadcasting trong NumPy, có một số lưu ý quan trọng để xem xét:

  1. Đảm bảo kích thước mảng tương thích: Broadcasting chỉ hoạt động khi các kích thước mảng tương thích. Điều này có nghĩa là các chiều của các mảng có thể phù hợp hoặc có kích thước là 1. Hãy chắc chắn rằng bạn đã kiểm tra kích thước mảng của bạn và đảm bảo rằng chúng đáp ứng yêu cầu của quy tắc Broadcasting.
  2. Kiểm tra kết quả phép toán: Khi sử dụng Broadcasting, hãy kiểm tra kết quả của phép toán để đảm bảo rằng nó đáp ứng mong đợi của bạn. Đôi khi, Broadcasting có thể dẫn đến kết quả không mong muốn, do đó, hãy kiểm tra kỹ lưỡng để đảm bảo tính chính xác của kết quả.
  3. Hiểu rõ quy tắc Broadcasting: Để sử dụng Broadcasting hiệu quả, hãy hiểu rõ các quy tắc và nguyên tắc hoạt động của nó. Điều này sẽ giúp bạn áp dụng Broadcasting đúng cách và tránh các lỗi không mong muốn.
  4. Kiểm tra hiệu năng: Mặc dù Broadcasting giúp tiết kiệm thời gian và tăng tốc độ xử lý dữ liệu, tuy nhiên, nó cũng có thể tạo ra một số overhead nếu không được sử dụng đúng cách. Hãy kiểm tra hiệu năng của mã của bạn và đảm bảo rằng Broadcasting không gây ra hiệu ứng ngược lại.
  5. Đọc tài liệu và ví dụ: NumPy cung cấp tài liệu phong phú và ví dụ minh họa về Broadcasting. Hãy đọc kỹ tài liệu và nghiên cứu các ví dụ để hiểu rõ hơn về cách sử dụng Broadcasting và các tình huống cụ thể mà nó áp dụng.

Tóm lại, sử dụng Broadcasting trong NumPy yêu cầu sự cẩn thận và hiểu biết về các quy tắc và lưu ý khi sử dụng. Bằng cách tuân thủ các lưu ý trên, bạn có thể tận dụng lợi ích của Broadcasting trong việc xử lý dữ liệu hiệu quả trong NumPy.

Xem thêm Sắp xếp và tìm kiếm trong numpy

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now