NumPy vysielanie

Numpy Vysielanie



Polia rôznej veľkosti nie je možné pridávať, odčítavať ani inak používať v aritmetike. Jedným z prístupov je duplikovanie poľa malých, aby malo rovnaké rozmery a veľkosť ako väčšie pole. Pri vykonávaní aritmetiky poľa ponúka NumPy funkciu známu ako vysielanie poľa, ktorá môže výrazne skrátiť a zjednodušiť váš kód. V tomto návode sa dozviete o myšlienke vysielania poľa a ako ho používať v NumPy. Okrem toho je k dispozícii niekoľko vzorových programov.

Čo je NumPy Broadcasting?

Pri vykonávaní aritmetických operácií na poliach rôznych foriem to NumPy označuje ako vysielanie. Tieto operácie poľa sa často vykonávajú na príslušných prvkoch. Ak majú dve polia rovnaký tvar, dá sa to na nich ľahko urobiť. Aj keď je tento koncept užitočný, vysielanie sa nie vždy odporúča, pretože môže viesť k neefektívnemu využívaniu pamäte, čo spomaľuje výpočet. Operácie NumPy sa často vykonávajú na pároch polí, ktoré sú rozdelené prvok po prvku.

Pravidlá vysielania

Pri vysielaní je potrebné dodržiavať určitý súbor pokynov. Tieto sú popísané nižšie:







  1. Ak dve polia nemajú rovnakú hodnotu, je dôležité, aby bol tvar poľa s nižšou úrovňou predradený 1 s, kým oba tvary polí nemajú rovnakú dĺžku.
  2. Dve polia sa považujú za kompatibilné, ak majú rovnakú veľkosť rozmeru alebo ak má jedno z nich veľkosť rozmeru nastavenú na 1.
  3. Polia môžu byť vysielané spolu iba vtedy, ak sa ich veľkosti a rozmery zhodujú.
  4. Po dokončení vysielania sa každé pole správa tak, ako keby jeho forma zodpovedala tvaru najväčšieho prvku v tvaroch dvoch vstupných polí.
  5. Jedno z polí sa správa tak, ako keby bolo replikované s touto dimenziou, ak má druhé pole rozmer väčší ako 1 a prvé pole má rozmer 1.

Teraz poďme diskutovať o niekoľkých príkladoch implementácie konceptu vysielania.



Príklad 1:

Na pároch polí sa operácie NumPy zvyčajne vykonávajú prvok po prvku. Dve polia musia mať v najjednoduchšom scenári rovnaký tvar ako v príklade nižšie:



importovať numpy

one_arr = numpy. pole ( [ 2.0 , 3.0 , 1,0 ] )

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

vytlačiť ( one_arr * two_arr )





Ako vidíte z kódu vyššie, máme dve polia: „one_arr“ a „two_ arr“. Každý z nich má samostatný súbor hodnôt. Hodnoty „one_arr“ sú [2.0,3.0,1.0] a „dva _arr“ sú [3.0,3.0,3.0]. Potom môžete vidieť, že výsledok výpočtu súčinu týchto dvoch polí je nasledujúci:



Keď formuláre polí spĺňajú určité požiadavky, pravidlo vysielania NumPy toto obmedzenie znižuje. Keď sa pole a skalárna hodnota spoja do operácie, vysielanie sa demonštruje vo svojej najzákladnejšej forme. Ako vidíte, 3 je obsiahnutá v premennej s názvom „two_arr“.

importovať numpy

one_arr = numpy. pole ( [ 2.0 , 3.0 , 1,0 ] )

dva_arr = 3.0

vytlačiť ( one_arr * two_arr )

Vyššie uvedený kód vytvára nasledujúci výsledok.

V predchádzajúcom príklade, kde „two_arr“ bolo pole, je výsledok ekvivalentný. Môžeme si predstaviť, že skalár „two_arr“ sa počas aritmetického procesu rozšíri na pole, ktoré má rovnaký tvar ako „jeden _arr“. Pole „two_arr“ obsahuje nové prvky, ktoré sú iba duplikátmi prvého skalára. Porovnanie naťahovania je len hypotetické. Na to, aby boli operácie vysielania ako pamäťové a výpočtovo úsporné, ako uskutočniteľné, NumPy je dostatočne inteligentný na to, aby namiesto vytvárania kópií použil pôvodnú skalárnu hodnotu.

Príklad 2:

Tu je ďalší jednoduchý program Python, ktorý vysiela. Opäť sa vytvoria dve polia obsahujúce rôzne hodnoty. Na výpočet vonkajšieho produktu je potrebné zmeniť tvar „first_arr“ na stĺpcový vektor s tvarom 3×1. Potom sa vysielanie uskutoční proti 'second_arr', aby sa získal výsledok s veľkosťou 3×2, známy ako vonkajší produkt 'first_arr' a 'second_arr.' Vysielanie na 2×3 je možné, pretože 'result_arr' má tvar 2 ×3, ako aj tvar (3,).

Po vykonaní všetkých vyššie uvedených krokov musí byť vektor zahrnutý do každého stĺpca matíc, ktoré sú „result_arr“ a „second_arr“. Tieto majú rozmery 2×3 a (2, ). Transpozícia „result_arr“ poskytne tvar 3 × 2, ktorý sa potom môže vysielať proti „second_arr“, aby sa získal rovnaký tvar. Transponovaním sa zvyčajne získa konečný produkt v tvare 2x3.

importovať numpy

first_arr = numpy. pole ( [ 12 , 24 , 14 ] )

second_arr = numpy. pole ( [ pätnásť , 22 ] )

vytlačiť ( numpy. pretvarovať ( first_arr , ( 3 , 1 ) ) * second_arr )

result_arr = numpy. pole ( [ [ 12 , 22 , 31 ] , [ pätnásť , 22 , Štyri, päť ] ] )

vytlačiť ( result_arr + first_arr )

vytlačiť ( ( result_arr. T + second_arr ) . T )

vytlačiť ( result_arr + numpy. pretvarovať ( second_arr , ( dva , 1 ) ) )

vytlačiť ( result_arr * dva )

Výstup si môžete pozrieť nižšie.

Príklad 3:

Trojrozmerné pole je možné vysielať pomocou nasledujúceho programu Python. V tomto príklade boli vygenerované dve polia s názvom „first_arr“ a „second_arr“. Pole „first_arr“ obsahuje hodnoty [4,13,26,12] a pole „second_arr“ obsahuje hodnoty [32,67,45,17]. Počiatočné 2-rozmery poľa robia rozdiel. Súčet prvého a druhého poľa sa zobrazí nižšie po vykonaní kódu. Môžete vidieť, že v kóde máme tri tlačové príkazy, z ktorých každý zobrazuje text „Prvé pole:“, „Druhé pole“ a „Tretie pole:“. Potom sa zobrazí súčet týchto dvoch novo vygenerovaných polí.

importovať numpy

first_arr = numpy. pole ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Štyri, päť , 17 ] ] )

second_arr = numpy. pole ( [ 24 , Štyri, päť , 66 , 87 ] )

vytlačiť ( ' \n Prvé pole: ' )

vytlačiť ( first_arr )

vytlačiť ( ' \n Druhé pole: ' )

vytlačiť ( second_arr )

vytlačiť ( ' \n Súčet prvého a druhého poľa: ' )

súčet_výsledok = first_arr + second_arr ;

vytlačiť ( súčet_výsledok )

Tu je výstupná snímka obrazovky daného kódu.

Príklad 4:

Tu je uvedený posledný program Pythonu, ktorý vysiela trojrozmerné pole. V tomto programe sú špecifikované dve polia, z ktorých prvé má tri rozmery. Súčet prvého a druhého poľa sa po vykonaní kódu zobrazí, ako je uvedené vyššie. Hoci sa hodnoty v týchto poliach líšia, zostávajúci kód je rovnaký ako kód použitý vo vzorovom programe vyššie.

importovať numpy

first_arr = numpy. pole ( [ [ 12 , Štyri, päť , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ päťdesiat , 40 , 18 , 26 ] ] )

second_arr = numpy. pole ( [ 12 , 44 , 22 , 12 ] )

vytlačiť ( ' \n Prvé pole: ' )

vytlačiť ( first_arr )

vytlačiť ( ' \n Druhé pole: ' )

vytlačiť ( second_arr )

vytlačiť ( ' \n Súčet prvého a druhého poľa: ' )

súčet_výsledok = first_arr + second_arr ;

vytlačiť ( súčet_výsledok )

Na obrázku nižšie môžete vidieť, že je prezentované 3-rozmerné pole z prvého poľa, za ktorým nasleduje 2-rozmerné pole z druhého poľa a výsledok týchto dvoch využívajúcich princíp vysielania.

Záver

Tento článok diskutoval o vysielaní, kľúčovom koncepte Pythonu. V NumPy sa pojem „vysielanie“ vzťahuje na schopnosť zvládnuť polia rôznych tvarov pri vykonávaní aritmetických operácií, ktoré sa často vykonávajú. Vyššie uvedená téma bola dôkladne pokrytá množstvom príkladov. Tento článok použil uvedené príklady programov na demonštráciu toho, ako vysielať na 1-D, 2-D a 3-D poliach. Môžete sa pokúsiť spustiť tieto príklady vo vašom systéme a zobraziť výsledky, aby ste lepšie pochopili, ako všetko vo všeobecnosti funguje.