NumPy Broadcasting

Numpy Broadcasting



Les matrius de diferents mides no es poden afegir, restar o utilitzar d'una altra manera en aritmètica. Duplicar la matriu de petits per donar-li les mateixes dimensions i mida que la matriu més gran és un enfocament. Quan es realitza l'aritmètica de matrius, NumPy ofereix una funció coneguda com a emissió de matrius que pot escurçar i simplificar significativament el vostre codi. Aprendràs la idea de la transmissió de matrius i com utilitzar-la a NumPy en aquest tutorial. A més, es proporcionen diversos programes d'exemple.

Què és NumPy Broadcasting?

Quan es realitzen operacions aritmètiques en matrius de diferents formes, NumPy es refereix a això com a broadcasting. Aquestes operacions de matriu es duen a terme amb freqüència en els elements respectius. Si dues matrius tenen la mateixa forma, es pot fer-hi amb facilitat. Tot i que aquest concepte és útil, la difusió no sempre es recomana perquè pot provocar un ús ineficient de la memòria que alentiri el càlcul. Les operacions NumPy es realitzen sovint en parells de matrius que es desglossen element per element.

Normes d'emissió

S'ha de seguir un conjunt de pautes particulars durant l'emissió. Aquestes es descriuen a continuació:







  1. La forma de matriu de rang inferior és important que s'afegi amb 1 fins que les dues formes de les matrius comparteixen la mateixa longitud si dues matrius no tenen el mateix rang.
  2. Es considera que dues matrius són compatibles si tenen la mateixa mida de cota o si una d'elles té la mida de cota establerta en 1.
  3. Les matrius només es poden difondre juntes si les seves mides i dimensions coincideixen.
  4. Un cop finalitzada la transmissió, cada matriu actua com si la seva forma coincideixi amb la de l'element més gran de les formes de les dues matrius d'entrada.
  5. Una de les matrius es comporta com si s'hagués replicat amb aquesta dimensió si l'altra matriu té una dimensió superior a 1 i la primera matriu té una dimensió d'1.

Ara, analitzem alguns exemples d'implementació del concepte de radiodifusió.



Exemple 1:

En parells de matrius, les operacions NumPy es duen a terme normalment element per element. Les dues matrius han de tenir, en l'escenari més senzill, la mateixa forma, com a l'exemple següent:



importar numpy

un_arr = numpy. matriu ( [ 2.0 , 3.0 , 1.0 ] )

dos_arr = numpy. matriu ( [ 3.0 , 3.0 , 3.0 ] )

imprimir ( one_arr * two_arr )





Com podeu veure al codi anterior, tenim dues matrius: 'one_arr' i 'two_ arr'. Cadascun dels quals té un conjunt de valors separat. Els valors d''one_arr' són [2.0,3.0,1.0] i 'two _arr' són [3.0,3.0,3.0]. A continuació, podeu veure que el resultat del càlcul del producte d'aquestes dues matrius és el següent:



Quan els formularis de les matrius compleixen certs requisits, la regla de difusió de NumPy redueix aquesta restricció. Quan una matriu i un valor escalar s'uneixen en una operació, la difusió es demostra en la seva forma més bàsica. Com podeu veure, 3 està contingut a la variable anomenada 'two_arr'.

importar numpy

un_arr = numpy. matriu ( [ 2.0 , 3.0 , 1.0 ] )

dos_arr = 3.0

imprimir ( one_arr * two_arr )

El codi anterior produeix el resultat següent.

A l'exemple anterior, on 'two_arr' era una matriu, el resultat és equivalent. Ens podem imaginar que l'escalar 'two_arr' s'expandeix durant el procés aritmètic en una matriu amb la mateixa forma que 'una _arr'. La matriu 'two_arr' conté elements nous que només són duplicats del primer escalar. La comparació d'estiraments és només hipotètica. Per fer que les operacions de difusió siguin com a memòria i computacionalment econòmiques el més factibles, NumPy és prou intel·ligent com per utilitzar el valor escalar original en lloc de produir còpies.

Exemple 2:

Aquí teniu un altre programa Python senzill que realitza emissions. Una vegada més, es creen dues matrius que contenen valors diferents. Cal remodelar 'first_arr' en un vector columna amb una forma 3×1 per calcular un producte exterior. Després d'això, l'emissió es realitza contra 'second_arr' per proporcionar un resultat de mida 3×2, conegut com el producte exterior de 'first_arr' i 'second_arr'. La difusió a 2×3 és possible ja que 'result_arr' té la forma 2. ×3 així com la forma (3,).

Després de seguir tots els passos esmentats anteriorment, s'ha d'incloure un vector a cada columna de les matrius que són 'result_arr' i 'second_arr'. Aquestes tenen dimensions de 2×3 i (2, ). La transposició de 'result_arr' donarà una forma de 3×2, que després es pot emetre contra 'second_arr' per obtenir la mateixa forma. Normalment, la transposició d'això produeix un producte final amb la forma 2×3.

importar numpy

primer_arr = numpy. matriu ( [ 12 , 24 , 14 ] )

segon_arr = numpy. matriu ( [ 15 , 22 ] )

imprimir ( numpy. remodelar ( primer_arr , ( 3 , 1 ) ) * segon_arr )

resultat_arr = numpy. matriu ( [ [ 12 , 22 , 31 ] , [ 15 , 22 , 45 ] ] )

imprimir ( resultat_arr + first_arr )

imprimir ( ( resultat_arr. T + segon_arr ) . T )

imprimir ( resultat_arr + numpy. remodelar ( segon_arr , ( 2 , 1 ) ) )

imprimir ( resultat_arr * 2 )

Podeu veure la sortida a continuació.

Exemple 3:

Es pot emetre una matriu tridimensional mitjançant el següent programa Python. En aquest exemple, s'han generat dues matrius anomenades 'first_arr' i 'second_arr'. La matriu 'first_arr' conté [4,13,26,12] valors i 'second_arr' conté [32,67,45,17] valors. Les 2 dimensions de la matriu inicial marquen la diferència. La suma de la primera i la segona matriu es mostrarà a continuació un cop s'hagi executat el codi. Podeu veure que tenim tres declaracions d'impressió al codi, cadascuna de les quals mostra el text 'Primera matriu:', 'Segona matriu' i 'Tercera matriu:' al seu torn. A continuació, es mostra la suma d'aquestes dues matrius recentment generades.

importar numpy

primer_arr = numpy. matriu ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , 45 , 17 ] ] )

segon_arr = numpy. matriu ( [ 24 , 45 , 66 , 87 ] )

imprimir ( ' \n Primera matriu: ' )

imprimir ( primer_arr )

imprimir ( ' \n Segona matriu: ' )

imprimir ( segon_arr )

imprimir ( ' \n Suma de la primera i la segona matriu: ' )

suma_resultat = first_arr + segon_arr ;

imprimir ( suma_resultat )

Aquí teniu la captura de pantalla de sortida del codi donat.

Exemple 4:

Aquí es mostra l'últim programa de Python que emet una matriu tridimensional. En aquest programa s'especifiquen dues matrius, la primera de les quals té tres dimensions. La suma de la primera i la segona matriu es mostrarà com es mostra a dalt un cop s'hagi executat el codi. Tot i que els valors d'aquestes matrius varien, el codi restant és el mateix que el que s'utilitza al programa d'exemple anterior.

importar numpy

primer_arr = numpy. matriu ( [ [ 12 , 45 , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ 50 , 40 , 18 , 26 ] ] )

segon_arr = numpy. matriu ( [ 12 , 44 , 22 , 12 ] )

imprimir ( ' \n Primera matriu: ' )

imprimir ( primer_arr )

imprimir ( ' \n Segona matriu: ' )

imprimir ( segon_arr )

imprimir ( ' \n Suma de la primera i la segona matriu: ' )

suma_resultat = first_arr + segon_arr ;

imprimir ( suma_resultat )

Podeu veure a la figura següent que es presenta una matriu tridimensional de la primera matriu, seguida d'una matriu bidimensional de la segona matriu i el resultat d'aquestes dues utilitzant el principi de difusió.

Conclusió

Aquest article parlava de la radiodifusió, un concepte crucial de Python. A NumPy, el terme 'difusió' es refereix a la capacitat de manejar matrius de diverses formes mentre es duen a terme operacions aritmètiques que es realitzen amb freqüència. El tema esmentat s'ha tractat a fons amb una varietat d'exemples. Aquest article va utilitzar els programes d'exemple esmentats per demostrar com emetre en matrius 1-D, 2-D i 3-D, respectivament. Podeu provar d'executar aquests exemples al vostre sistema i veure els resultats per entendre millor com funciona tot en general.