NumPy vysílání

Numpy Vysilani



Pole různé velikosti nelze přičítat, odečítat od nich ani jinak používat v aritmetice. Jedním z přístupů je duplikování pole malých, aby mělo stejné rozměry a velikost jako větší pole. Při provádění aritmetiky pole nabízí NumPy funkci známou jako vysílání pole, které může výrazně zkrátit a zjednodušit váš kód. V tomto tutoriálu se dozvíte o myšlence vysílání pole a jak jej používat v NumPy. Kromě toho je k dispozici několik ukázkových programů.

Co je NumPy Broadcasting?

Při provádění aritmetických operací na polích různých forem to NumPy označuje jako vysílání. Tyto operace pole se často provádějí na příslušných prvcích. Pokud mají dvě pole stejný tvar, lze to na nich snadno provést. I když je tento koncept užitečný, vysílání není vždy doporučeno, protože může mít za následek neefektivní využití paměti, které zpomaluje výpočet. Operace NumPy se často provádějí na párech polí, které jsou rozděleny prvek po prvku.

Pravidla vysílání

Při vysílání je třeba dodržovat určitý soubor pokynů. Tyto jsou popsány níže:







  1. Pokud dvě pole nemají stejnou hodnotu, je důležité, aby tvar pole nižšího pořadí byl předřazen 1s, dokud oba tvary polí nebudou mít stejnou délku.
  2. Dvě pole jsou považována za kompatibilní, pokud mají stejnou velikost rozměru nebo pokud má jedno z nich velikost rozměru nastavenou na 1.
  3. Pole lze vysílat společně pouze tehdy, pokud se jejich velikosti a rozměry shodují.
  4. Jakmile je vysílání dokončeno, každé pole se chová, jako by jeho forma odpovídala tvaru největšího prvku ve tvarech dvou vstupních polí.
  5. Jedno z polí se chová, jako by bylo replikováno s touto dimenzí, pokud má druhé pole rozměr větší než 1 a první pole má rozměr 1.

Nyní si proberme některé příklady implementace konceptu vysílání.



Příklad 1:

Na párech polí se operace NumPy obvykle provádějí prvek po prvku. Dvě pole musí mít v nejjednodušším scénáři stejný tvar jako v příkladu níže:



import nemotorný

jeden_arr = nemotorný. pole ( [ 2,0 , 3.0 , 1,0 ] )

dva_arr = nemotorný. pole ( [ 3.0 , 3.0 , 3.0 ] )

tisk ( one_arr * two_arr )





Jak můžete vidět z výše uvedeného kódu, máme dvě pole: „one_arr“ a „two_ arr“. Každý z nich má samostatnou sadu hodnot. Hodnoty v ‘one_arr’ jsou [2.0,3.0,1.0] a ‘dva _arr’ jsou [3.0,3.0,3.0]. Pak můžete vidět, že výsledek výpočtu součinu těchto dvou polí je následující:



Když formuláře polí splňují určité požadavky, pravidlo vysílání NumPy toto omezení snižuje. Když jsou pole a skalární hodnota spojeny v operaci, vysílání je demonstrováno ve své nejzákladnější podobě. Jak vidíte, 3 je obsažena v proměnné s názvem „two_arr“.

import nemotorný

jeden_arr = nemotorný. pole ( [ 2,0 , 3.0 , 1,0 ] )

dva_arr = 3.0

tisk ( one_arr * two_arr )

Výše uvedený kód vytváří následující výsledek.

V předchozím příkladu, kde „two_arr“ bylo pole, je výsledek ekvivalentní. Můžeme si představit, že skalár „two_arr“ se během aritmetického procesu rozšíří do pole, které má stejný tvar jako „jeden _arr“. Pole „two_arr“ obsahuje nové prvky, které jsou pouze duplikáty prvního skaláru. Srovnání natahování je pouze hypotetické. NumPy je dostatečně chytrý na to, aby namísto vytváření kopií využíval původní skalární hodnotu, aby byly operace vysílání jako paměťové a výpočtově hospodárné.

Příklad 2:

Zde je další jednoduchý program Python, který vysílá. Opět se vytvoří dvě pole obsahující různé hodnoty. Pro výpočet vnějšího součinu je nutné přetvořit „first_arr“ na sloupcový vektor s tvarem 3×1. Poté se vysílání provádí proti 'second_arr', aby se získal výsledek o velikosti 3×2, známý jako vnější produkt 'first_arr' a 'second_arr.' Vysílání do 2×3 je možné, protože 'result_arr' má tvar 2 ×3 stejně jako tvar (3,).

Po provedení všech výše uvedených kroků musí být vektor zahrnut do každého sloupce matic, které jsou ‚result_arr‘ a ‚second_arr.‘ Tyto mají rozměry 2×3 a (2, ). Transponováním ‚result_arr‘ vznikne tvar 3×2, který pak lze vysílat proti ‚second_arr‘ a získat stejný tvar. Transponováním se obvykle získá konečný produkt ve tvaru 2×3.

import nemotorný

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

second_arr = nemotorný. pole ( [ patnáct , 22 ] )

tisk ( nemotorný. přetvořit ( first_arr , ( 3 , 1 ) ) * second_arr )

result_arr = nemotorný. pole ( [ [ 12 , 22 , 31 ] , [ patnáct , 22 , Čtyři pět ] ] )

tisk ( result_arr + first_arr )

tisk ( ( result_arr. T + second_arr ) . T )

tisk ( result_arr + numpy. přetvořit ( second_arr , ( dva , 1 ) ) )

tisk ( result_arr * dva )

Výstup si můžete prohlédnout níže.

Příklad 3:

Trojrozměrné pole lze vysílat pomocí následujícího programu Python. V tomto příkladu byla vygenerována dvě pole s názvem „first_arr“ a „second_arr“. Pole ‚first_arr‘ obsahuje [4,13,26,12] hodnot a ‚second_arr‘ obsahuje [32,67,45,17] hodnot. 2-rozměry počátečního pole dělají rozdíl. Po provedení kódu se níže zobrazí součet prvního a druhého pole. Můžete vidět, že v kódu máme tři tiskové příkazy, z nichž každý postupně zobrazuje text ‚První pole:‘, ‚Druhé pole‘ a ‚Třetí pole:‘. Poté se zobrazí součet těchto dvou nově vygenerovaných polí.

import nemotorný

first_arr = nemotorný. pole ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Čtyři pět , 17 ] ] )

second_arr = nemotorný. pole ( [ 24 , Čtyři pět , 66 , 87 ] )

tisk ( ' \n První pole: ' )

tisk ( first_arr )

tisk ( ' \n Druhé pole: ' )

tisk ( second_arr )

tisk ( ' \n Součet prvního a druhého pole: ' )

součet_výsledek = first_arr + second_arr ;

tisk ( součet_výsledek )

Zde je výstupní snímek obrazovky daného kódu.

Příklad 4:

Zde je uveden poslední program Pythonu, který vysílá trojrozměrné pole. V tomto programu jsou specifikována dvě pole, z nichž první má tři rozměry. Po provedení kódu se zobrazí součet prvního a druhého pole, jak je uvedeno výše. Přestože se hodnoty v těchto polích liší, zbývající kód je stejný jako kód použitý ve výše uvedeném příkladu programu.

import nemotorný

first_arr = nemotorný. pole ( [ [ 12 , Čtyři pět , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ padesáti , 40 , 18 , 26 ] ] )

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

tisk ( ' \n První pole: ' )

tisk ( first_arr )

tisk ( ' \n Druhé pole: ' )

tisk ( second_arr )

tisk ( ' \n Součet prvního a druhého pole: ' )

součet_výsledek = first_arr + second_arr ;

tisk ( součet_výsledek )

Na obrázku níže můžete vidět, že je prezentováno 3-rozměrné pole z prvního pole, následované 2-rozměrným polem z druhého pole a výsledek těchto dvou využívajících princip vysílání.

Závěr

Tento článek pojednával o vysílání, klíčovém konceptu Pythonu. V NumPy termín „vysílání“ označuje schopnost zpracovávat pole různých tvarů při provádění aritmetických operací, které se často provádějí. Výše uvedené téma bylo důkladně pokryto řadou příkladů. Tento článek použil zmíněné ukázkové programy k demonstraci toho, jak vysílat na 1-D, 2-D a 3-D poli. Můžete se pokusit spustit tyto příklady ve vašem systému a zobrazit výsledky, abyste lépe pochopili, jak vše obecně funguje.