Ho difficoltà a comprendere le regole per la trasmissione di array in Numpy.Regole di trasmissione di Numpy array
Ovviamente, se si esegue la moltiplicazione a livello di elemento su due array di stesse dimensioni e forma, tutto è a posto. Inoltre, se si moltiplica una matrice multidimensionale con uno scalare, funziona. Questo capisco.
Ma se si dispone di due array N-dimensionale di diverse forme, non è chiaro per me esattamente quali siano le regole di trasmissione. Questo documentation/tutorial spiega che: Per la trasmissione, la dimensione degli assi finali per entrambi gli array in un'operazione deve essere della stessa dimensione o uno deve essere uno.
Ok, quindi immagino da trascinamento asse essi si riferiscono alla N
in una matrice M x N
. Quindi, questo significa che se provo a moltiplicare due array 2D (matrici) con lo stesso numero di colonne, dovrebbe funzionare? Tranne che non è così ...
>>> 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
Dato che sia A
e B
hanno due colonne, avrei pensato che avrebbe funzionato. Quindi, probabilmente sto fraintendendo qualcosa sul termine "asse finale" e su come si applica agli array N-dimensionali.
Qualcuno può spiegare perché il mio esempio non funziona e cosa si intende per "asse finale"?
Questa è una spiegazione molto buona della trasmissione, http://www.scipy.org/EricsBroadcastingDoc –
potresti aggiungere il tag "broadcasting" per favore? – denis
Il collegamento nel commento @BiRico è ora http://wiki.scipy.org/EricsBroadcastingDoc Mi chiedo perché sia stato spostato nel * dump di archivio *. – iled