Tôi gặp sự cố khi hiểu các quy tắc phát sóng mảng trong Numpy.Quy tắc phát sóng mảng cố định
Rõ ràng, nếu bạn thực hiện phép nhân yếu tố trên hai mảng có cùng kích thước và hình dạng, mọi thứ đều ổn. Ngoài ra, nếu bạn nhân một mảng đa chiều bởi một vô hướng nó hoạt động. Điều này tôi hiểu.
Nhưng nếu bạn có hai mảng N chiều là các hình dạng khác nhau, tôi không rõ chính xác quy tắc phát sóng là gì. Điều này documentation/tutorial giải thích rằng: Để phát sóng, kích thước của trục sau cho cả hai mảng trong một thao tác phải có cùng kích thước hoặc một trong số chúng phải là một.
Được rồi, vì vậy tôi giả bởi trailing trục họ đang đề cập đến N
trong một mảng M x N
. Vì vậy, điều đó có nghĩa là nếu tôi cố gắng nhân hai mảng 2D (ma trận) với số cột bằng nhau, nó sẽ hoạt động? Ngoại trừ nó không ...
>>> from numpy import *
>>> A = array([[1,2],[3,4]])
>>> B = array([[2,3],[4,6],[6,9],[8,12]])
>>> print(A)
[[1 2]
[3 4]]
>>> print(B)
[[ 2 3]
[ 4 6]
[ 6 9]
[ 8 12]]
>>>
>>> A * B
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Kể từ khi cả hai A
và B
có hai cột, tôi đã có thể nghĩ điều này sẽ làm việc. Vì vậy, tôi có thể hiểu lầm một cái gì đó ở đây về thuật ngữ "trục sau", và làm thế nào nó áp dụng cho các mảng N-chiều.
Ai đó có thể giải thích lý do vì sao ví dụ của tôi không hoạt động và ý nghĩa của "trục sau" là gì?
Đây là lời giải thích thực sự tốt về phát, http://www.scipy.org/EricsBroadcastingDoc –
bạn có thể thêm thẻ "phát sóng" không? – denis
Liên kết trong nhận xét @BiRico giờ đây là http://wiki.scipy.org/EricsBroadcastingDoc Tôi tự hỏi tại sao nó được chuyển tới bãi chứa * *. – iled