Trasmissione NumPy

Trasmissione Numpy



Non è possibile aggiungere, sottrarre o altrimenti utilizzare in aritmetica matrici di dimensioni diverse. Duplicare l'array di small per dargli le stesse dimensioni e dimensioni dell'array più grande è un approccio. Quando si esegue l'aritmetica di array, NumPy offre una funzionalità nota come trasmissione di array che può ridurre e semplificare notevolmente il codice. Imparerai l'idea della trasmissione di array e come usarla in NumPy in questo tutorial. Inoltre, vengono forniti diversi programmi di esempio.

Che cos'è NumPy Broadcasting?

Quando si eseguono operazioni aritmetiche su matrici di forme diverse, NumPy si riferisce a questo come trasmissione. Queste operazioni sugli array vengono spesso eseguite sui rispettivi elementi. Se due array hanno la stessa forma, è possibile eseguirli con facilità. Anche se questo concetto è utile, la trasmissione non è sempre consigliata perché può comportare un utilizzo inefficiente della memoria che rallenta il calcolo. Le operazioni NumPy vengono spesso eseguite su coppie di array suddivise elemento per elemento.

Regole di trasmissione

Durante la trasmissione è necessario seguire una serie particolare di linee guida. Questi sono descritti di seguito:







  1. La forma della matrice di rango inferiore è importante da anteporre con 1s finché entrambe le forme delle matrici condividono la stessa lunghezza se due matrici non hanno lo stesso rango.
  2. Due array sono considerati compatibili se hanno la stessa dimensione della dimensione o se una di esse ha la dimensione della dimensione impostata su 1.
  3. Gli array possono essere trasmessi insieme solo se le loro dimensioni e dimensioni corrispondono.
  4. Una volta completata la trasmissione, ogni array si comporta come se la sua forma corrisponda a quella dell'elemento più grande nelle forme dei due array di input.
  5. Una delle matrici si comporta come se fosse replicata con quella dimensione se l'altra matrice ha una dimensione maggiore di 1 e la prima matrice ha una dimensione di 1.

Ora, discutiamo alcuni esempi di implementazione del concetto di trasmissione.



Esempio 1:

Su coppie di array, le operazioni NumPy vengono in genere eseguite elemento per elemento. I due array devono, nello scenario più semplice, avere la stessa forma, come nell'esempio seguente:



importare intontito

uno_arr = intontito. Vettore ( [ 2.0 , 3.0 , 1.0 ] )

due_arr = intontito. Vettore ( [ 3.0 , 3.0 , 3.0 ] )

Stampa ( uno_arr * due_arr )





Come puoi vedere dal codice sopra, abbiamo due array: 'one_arr' e 'two_ arr'. Ciascuno dei quali ha un insieme separato di valori. I valori in 'uno_arr' sono [2.0,3.0,1.0] e 'due _arr' sono [3.0,3.0,3.0]. Puoi quindi vedere che il risultato del calcolo del prodotto di questi due array è il seguente:



Quando determinati requisiti sono soddisfatti dai moduli degli array, la regola di trasmissione di NumPy riduce questa restrizione. Quando una matrice e un valore scalare vengono uniti in un'operazione, la trasmissione viene illustrata nella sua forma più semplice. Come puoi vedere, 3 è contenuto nella variabile denominata 'two_arr.'

importare intontito

uno_arr = intontito. Vettore ( [ 2.0 , 3.0 , 1.0 ] )

due_arr = 3.0

Stampa ( uno_arr * due_arr )

Il codice sopra produce il seguente risultato.

Nell'esempio precedente, dove 'two_arr' era un array, il risultato è equivalente. Possiamo immaginare che lo scalare 'two_arr' venga espanso durante il processo aritmetico in un array avente la stessa forma di 'one _arr'. L'array 'two_arr' contiene nuovi elementi che sono semplicemente duplicati del primo scalare. Il confronto dello stretching è puramente ipotetico. Per rendere le operazioni di trasmissione come memoria e computazionalmente economiche il più possibile, NumPy è abbastanza intelligente da utilizzare il valore scalare originale anziché produrre copie.

Esempio 2:

Ecco un altro semplice programma Python che esegue la trasmissione. Ancora una volta, vengono creati due array contenenti valori diversi. È necessario rimodellare 'first_arr' in un vettore colonna con una forma 3×1 per calcolare un prodotto esterno. In seguito, la trasmissione viene eseguita su 'second_arr' per fornire un risultato di dimensione 3×2, noto come prodotto esterno di 'first_arr' e 'second_arr.' La trasmissione su 2×3 è possibile poiché 'result_arr' ha la forma 2 ×3 così come la forma (3,).

Dopo aver seguito tutti i passaggi sopra menzionati, un vettore deve essere incluso in ogni colonna delle matrici che sono 'result_arr' e 'second_arr.' Queste hanno dimensioni di 2×3 e (2, ). La trasposizione di 'result_arr' produrrà una forma di 3 × 2, che può quindi essere trasmessa contro 'second_arr' per ottenere la stessa forma. Tipicamente, trasponendo questo si ottiene un prodotto finale nella forma 2×3.

importare intontito

primo_arr = intontito. Vettore ( [ 12 , 24 , 14 ] )

secondo_arr = intontito. Vettore ( [ quindici , 22 ] )

Stampa ( intontito. rimodellare ( primo_arr , ( 3 , 1 ) ) * secondo_arr )

risultato_arr = intontito. Vettore ( [ [ 12 , 22 , 31 ] , [ quindici , 22 , Quattro cinque ] ] )

Stampa ( risultato_arr + primo_arr )

Stampa ( ( risultato_arr. T + secondo_arr ) . T )

Stampa ( risultato_arr + numpy. rimodellare ( secondo_arr , ( Due , 1 ) ) )

Stampa ( risultato_arr * Due )

È possibile visualizzare l'output di seguito.

Esempio 3:

Un array tridimensionale può essere trasmesso utilizzando il seguente programma Python. In questo esempio sono stati generati due array denominati 'first_arr' e 'second_arr'. L'array 'first_arr' contiene [4,13,26,12] valori e 'second_arr' contiene [32,67,45,17] valori. Le 2 dimensioni dell'array iniziale fanno la differenza. La somma del primo e del secondo array verrà mostrata di seguito dopo l'esecuzione del codice. Puoi vedere che abbiamo tre istruzioni di stampa nel codice, ognuna delle quali mostra il testo 'Primo array:', 'Secondo array' e 'Terzo array:' a turno. Viene quindi mostrata la somma di questi due array appena generati.

importare intontito

primo_arr = intontito. Vettore ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Quattro cinque , 17 ] ] )

secondo_arr = intontito. Vettore ( [ 24 , Quattro cinque , 66 , 87 ] )

Stampa ( ' \n Primo array: ' )

Stampa ( primo_arr )

Stampa ( ' \n Secondo array: ' )

Stampa ( secondo_arr )

Stampa ( ' \n Somma del primo e del secondo array: ' )

somma_risultato = primo_arr + secondo_arr ;

Stampa ( somma_risultato )

Ecco lo screenshot di output del codice fornito.

Esempio 4:

L'ultimo programma Python che trasmette un array tridimensionale è riportato qui. In questo programma sono specificati due array, il primo dei quali ha tre dimensioni. La somma del primo e del secondo array verrà mostrata come mostrato sopra dopo che il codice è stato eseguito. Sebbene i valori in questi array varino, il codice rimanente è lo stesso utilizzato nel programma di esempio sopra.

importare intontito

primo_arr = intontito. Vettore ( [ [ 12 , Quattro cinque , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ cinquanta , 40 , 18 , 26 ] ] )

secondo_arr = intontito. Vettore ( [ 12 , 44 , 22 , 12 ] )

Stampa ( ' \n Primo array: ' )

Stampa ( primo_arr )

Stampa ( ' \n Secondo array: ' )

Stampa ( secondo_arr )

Stampa ( ' \n Somma del primo e del secondo array: ' )

somma_risultato = primo_arr + secondo_arr ;

Stampa ( somma_risultato )

Puoi vedere nella figura seguente che viene presentato un array tridimensionale dal primo array, seguito da un array bidimensionale dal secondo array e il risultato di questi due che utilizza il principio di trasmissione.

Conclusione

Questo articolo ha discusso della trasmissione, un concetto cruciale di Python. In NumPy, il termine 'broadcasting' si riferisce alla capacità di gestire array di varie forme durante l'esecuzione di operazioni aritmetiche che vengono eseguite frequentemente. L'argomento di cui sopra è stato ampiamente trattato con una varietà di esempi. Questo articolo ha utilizzato i programmi di esempio citati per dimostrare come trasmettere rispettivamente su array 1D, 2D e 3D. Puoi provare a eseguire questi esempi sul tuo sistema e visualizzare i risultati per comprendere meglio come funziona tutto in generale.