NumPy emitiranje

Numpy Emitiranje



Nizovi različitih veličina ne mogu se dodavati, oduzimati ili na drugi način koristiti u aritmetici. Dupliciranje niza malih da bi mu se dale iste dimenzije i veličina kao i veće polje jedan je pristup. Prilikom izvođenja aritmetike polja, NumPy nudi značajku poznatu kao emitiranje polja koja može značajno skratiti i pojednostaviti vaš kod. Naučit ćete o ideji emitiranja polja i kako ga koristiti u NumPy u ovom vodiču. Osim toga, pruža se nekoliko primjera programa.

Što je NumPy Broadcasting?

Prilikom izvođenja aritmetičkih operacija na nizovima različitih oblika, NumPy to naziva emitiranjem. Ove operacije niza često se izvode na odgovarajućim elementima. Ako dva niza imaju isti oblik, to se može učiniti na njima s lakoćom. Iako je ovaj koncept koristan, emitiranje se ne preporučuje uvijek jer može dovesti do neučinkovite upotrebe memorije koja usporava računanje. NumPy operacije često se izvode na parovima nizova koji su raščlanjeni element po element.

Pravila emitiranja

Prilikom emitiranja potrebno je slijediti određeni skup smjernica. One su opisane u nastavku:







  1. Važno je da se ispred oblika niza nižeg ranga dodaju 1 sve dok oba oblika niza ne dijele istu duljinu ako dva niza nemaju isti rang.
  2. Smatra se da su dva niza kompatibilna ako imaju istu veličinu dimenzije ili ako jedna od njih ima veličinu dimenzije postavljenu na 1.
  3. Nizovi se mogu emitirati zajedno samo ako se njihove veličine i dimenzije podudaraju.
  4. Nakon što je emitiranje završeno, svaki niz djeluje kao da njegov oblik odgovara obliku najvećeg elementa u oblicima dvaju ulaznih nizova.
  5. Jedan od nizova ponaša se kao da je repliciran s tom dimenzijom ako drugi niz ima dimenziju veću od 1, a prvi niz ima dimenziju 1.

Sada raspravimo neke primjere implementacije koncepta emitiranja.



Primjer 1:

Na parovima nizova, NumPy operacije obično se izvode element po element. Dva niza moraju, u najjednostavnijem scenariju, imati isti oblik, kao u primjeru u nastavku:



uvoz numpy

jedan_arr = numpy. niz ( [ 2.0 , 3.0 , 1.0 ] )

dva_arr = numpy. niz ( [ 3.0 , 3.0 , 3.0 ] )

ispisati ( jedan_arr * dva_arr )





Kao što možete vidjeti iz gornjeg koda, imamo dva niza: 'one_arr' i 'two_ arr'. Svaki od njih ima zaseban skup vrijednosti. Vrijednosti u 'one_arr' su [2.0,3.0,1.0] i 'two _arr' su [3.0,3.0,3.0]. Tada možete vidjeti da je rezultat izračuna umnoška ova dva niza sljedeći:



Kada obrasci nizova ispune određene zahtjeve, NumPyjevo pravilo emitiranja smanjuje ovo ograničenje. Kada se niz i skalarna vrijednost spoje u operaciji, emitiranje se pokazuje u svom najosnovnijem obliku. Kao što vidite, 3 je sadržano u varijabli pod nazivom 'two_arr.'

uvoz numpy

jedan_arr = numpy. niz ( [ 2.0 , 3.0 , 1.0 ] )

dva_arr = 3.0

ispisati ( jedan_arr * dva_arr )

Gornji kod daje sljedeći rezultat.

U prethodnom primjeru, gdje je 'two_arr' bio niz, ishod je ekvivalentan. Možemo zamisliti da se skalar 'two_arr' proširuje tijekom aritmetičkog procesa u niz koji ima isti oblik kao 'one _arr'. Niz 'two_arr' sadrži nove elemente koji su samo duplikati prvog skalara. Usporedba rastezanja samo je hipotetska. Kako bi operacije emitiranja bile memorijske i računalno ekonomične koliko god je to moguće, NumPy je dovoljno pametan da koristi izvornu skalarnu vrijednost umjesto da proizvodi kopije.

Primjer 2:

Evo još jednog jednostavnog Python programa koji izvodi emitiranje. Ponovno se stvaraju dva polja koja sadrže različite vrijednosti. Potrebno je preoblikovati 'first_arr' u vektor stupca s oblikom 3×1 da bi se izračunao vanjski proizvod. Nakon toga, emitiranje se izvodi prema 'second_arr' kako bi se dobio rezultat veličine 3×2, poznat kao vanjski umnožak 'first_arr' i 'second_arr.' Emitiranje u 2×3 je moguće budući da 'result_arr' ima oblik 2 ×3 kao i oblik (3,).

Nakon provođenja svih gore navedenih koraka, vektor mora biti uključen u svaki stupac matrica koje su 'result_arr' i 'second_arr.' One imaju dimenzije 2×3 i (2, ). Transponiranje 'result_arr' dat će oblik 3×2, koji se zatim može emitirati prema 'second_arr' da se dobije isti oblik. Tipično, transponiranje ovoga daje konačni proizvod u obliku 2×3.

uvoz numpy

prvi_arr = numpy. niz ( [ 12 , 24 , 14 ] )

drugi_arr = numpy. niz ( [ petnaest , 22 ] )

ispisati ( numpy. preoblikovati ( prvi_arr , ( 3 , 1 ) ) * drugi_arr )

rezultat_arr = numpy. niz ( [ [ 12 , 22 , 31 ] , [ petnaest , 22 , Četiri pet ] ] )

ispisati ( rezultat_arr + prvi_arr )

ispisati ( ( rezultat_arr. T + drugi_arr ) . T )

ispisati ( result_arr + numpy. preoblikovati ( drugi_arr , ( dva , 1 ) ) )

ispisati ( rezultat_arr * dva )

Ispis možete vidjeti u nastavku.

Primjer 3:

Trodimenzionalni niz može se emitirati pomoću sljedećeg Python programa. U ovom primjeru generirana su dva niza pod nazivom 'first_arr' i 'second_arr'. Niz 'first_arr' sadrži [4,13,26,12] vrijednosti, a 'second_arr' sadrži [32,67,45,17] vrijednosti. 2-dimenzije početnog niza čine razliku. Zbroj prvog i drugog niza bit će prikazan u nastavku nakon što se kôd izvrši. Možete vidjeti da imamo tri izjave za ispis u kodu, od kojih svaka redom prikazuje tekst 'Prvi niz:', 'Drugi niz' i 'Treći niz:'. Zatim se prikazuje zbroj ova dva novogenerirana niza.

uvoz numpy

prvi_arr = numpy. niz ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Četiri pet , 17 ] ] )

drugi_arr = numpy. niz ( [ 24 , Četiri pet , 66 , 87 ] )

ispisati ( ' \n Prvi niz: ' )

ispisati ( prvi_arr )

ispisati ( ' \n Drugi niz: ' )

ispisati ( drugi_arr )

ispisati ( ' \n Zbroj prvog i drugog niza: ' )

zbroj_rezultat = prvi_arr + drugi_arr ;

ispisati ( zbroj_rezultat )

Ovdje je izlazna snimka zaslona danog koda.

Primjer 4:

Ovdje je dan posljednji Python program koji emitira trodimenzionalni niz. U ovom programu navedena su dva niza, od kojih prvi ima tri dimenzije. Zbroj prvog i drugog niza bit će prikazan kao što je prikazano iznad nakon što se kôd izvrši. Iako se vrijednosti u tim nizovima razlikuju, preostali kôd je isti kao onaj korišten u gornjem primjeru programa.

uvoz numpy

prvi_arr = numpy. niz ( [ [ 12 , Četiri pet , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ pedeset , 40 , 18 , 26 ] ] )

drugi_arr = numpy. niz ( [ 12 , 44 , 22 , 12 ] )

ispisati ( ' \n Prvi niz: ' )

ispisati ( prvi_arr )

ispisati ( ' \n Drugi niz: ' )

ispisati ( drugi_arr )

ispisati ( ' \n Zbroj prvog i drugog niza: ' )

zbroj_rezultat = prvi_arr + drugi_arr ;

ispisati ( zbroj_rezultat )

Na donjoj slici možete vidjeti da je predstavljen trodimenzionalni niz iz prvog niza, a zatim dvodimenzionalni niz iz drugog niza i rezultat ove dvije primjene principa emitiranja.

Zaključak

Ovaj članak raspravljao je o emitiranju, ključnom konceptu Pythona. U NumPyju se izraz 'emitiranje' odnosi na sposobnost rukovanja nizovima različitih oblika tijekom izvođenja aritmetičkih operacija koje se često izvode. Navedena tema je temeljito obrađena raznim primjerima. Ovaj članak upotrijebio je spomenute primjere programa za demonstraciju kako emitirati na 1-D, 2-D, odnosno 3-D nizovima. Možete pokušati pokrenuti ove primjere na svom sustavu i pogledati rezultate kako biste bolje razumjeli kako sve općenito funkcionira.