NumPy Broadcasting

Numpy Broadcasting



Különböző méretű tömbök nem adhatók hozzá, nem vonhatók ki belőle, és nem használhatók más módon az aritmetikában. Az egyik megközelítés a kicsi tömb megkettőzése, hogy ugyanolyan méretű és méretű legyen, mint a nagyobb tömbnek. A tömb aritmetika végrehajtásakor a NumPy egy tömbszórásként ismert funkciót kínál, amely jelentősen lerövidítheti és leegyszerűsítheti a kódot. Ebből az oktatóanyagból megtudhatja a tömbszórás ötletét és a NumPy alkalmazásban való használatát. Emellett számos példaprogram is rendelkezésre áll.

Mi az a NumPy Broadcasting?

Amikor aritmetikai műveleteket hajt végre különböző formájú tömbökön, a NumPy ezt sugárzásnak nevezi. Ezeket a tömbműveleteket gyakran a megfelelő elemeken hajtják végre. Ha két tömb azonos alakú, akkor ez könnyen megtehető rajtuk. Annak ellenére, hogy ez a koncepció hasznos, a műsorszórás nem mindig ajánlott, mert nem hatékony memóriahasználatot eredményezhet, ami lelassítja a számítást. A NumPy műveleteket gyakran elemenként lebontott tömbpárokon hajtják végre.

A műsorszórás szabályai

A sugárzás során bizonyos irányelveket kell követni. Ezeket az alábbiakban ismertetjük:







  1. Fontos, hogy az alacsonyabb rangú tömb alakját 1-essel fűzzük mindaddig, amíg a tömb mindkét alakja azonos hosszúságú, ha két tömb rangja nem azonos.
  2. Két tömb akkor tekinthető kompatibilisnek, ha a méretük megegyezik, vagy ha az egyik méretmérete 1.
  3. A tömbök csak akkor sugározhatók együtt, ha méretük és méretük megegyezik.
  4. A szórás befejezése után minden tömb úgy viselkedik, mintha a formája megegyezne a két bemeneti tömb formájának legnagyobb elemével.
  5. Az egyik tömb úgy viselkedik, mintha azzal a dimenzióval replikálták volna, ha a másik tömb mérete nagyobb, mint 1, és az első tömb mérete 1.

Most tárgyaljunk néhány példát a műsorszórás koncepciójának megvalósítására.



1. példa:

A tömbpárokon a NumPy műveleteket jellemzően elemenként hajtják végre. A két tömbnek a legegyszerűbb forgatókönyv szerint ugyanolyan alakúnak kell lennie, mint az alábbi példában:



import zsibbadt

egy_arr = zsibbadt. sor ( [ 2.0 , 3.0 , 1.0 ] )

két_arr = zsibbadt. sor ( [ 3.0 , 3.0 , 3.0 ] )

nyomtatás ( one_arr * two_arr )





Amint a fenti kódból látható, két tömbünk van: „one_arr” és „two_ arr”. Mindegyiknek külön értékkészlete van. Az „one_arr” értékei [2.0, 3.0, 1.0], a „two _arr” pedig [3.0, 3.0, 3.0]. Ekkor láthatja, hogy a két tömb szorzatának kiszámítása a következő:



Ha a tömbök formái teljesítenek bizonyos követelményeket, a NumPy sugárzási szabálya csökkenti ezt a korlátozást. Ha egy tömböt és egy skaláris értéket egyesítünk egy műveletben, a szórás a legalapvetőbb formában kerül bemutatásra. Amint láthatja, a 3-at a „two_arr” változó tartalmazza.

import zsibbadt

egy_arr = zsibbadt. sor ( [ 2.0 , 3.0 , 1.0 ] )

két_arr = 3.0

nyomtatás ( one_arr * two_arr )

A fenti kód a következő eredményt adja.

Az előző példában, ahol a „two_arr” egy tömb volt, az eredmény egyenértékű. Elképzelhető, hogy a „two_arr” skalár az aritmetikai folyamat során olyan tömbbé bővül, amelynek alakja megegyezik az „one _arr” alakkal. A „two_arr” tömb olyan új elemeket tartalmaz, amelyek csupán az első skalár másolatai. A nyújtási összehasonlítás csupán hipotetikus. Ahhoz, hogy a műsorszórási műveleteket memóriaként és számításilag gazdaságossá tegye, a NumPy elég okos ahhoz, hogy az eredeti skalárértéket használja a másolatok készítése helyett.

2. példa:

Íme egy másik egyszerű Python-program, amely sugárzást végez. Ismét két tömb jön létre, amelyek különböző értékeket tartalmaznak. A külső szorzat kiszámításához a „first_arr”-t át kell alakítani 3×1 alakú oszlopvektorrá. Ezt követően a sugárzás a 'second_arr' ellen történik, hogy 3×2 méretű eredményt kapjunk, amely a 'first_arr' és a 'second_arr' külső szorzataként ismert. A 2×3-as sugárzás lehetséges, mivel az 'result_arr' 2 alakú. ×3, valamint az alakzat (3,).

A fent említett lépések végrehajtása után a mátrixok minden oszlopában szerepelnie kell egy vektornak, amelyek 'result_arr' és 'second_arr'. Ezek mérete 2×3 és (2, ). A „result_arr” transzponálása 3×2-es alakzatot eredményez, amelyet ezután a „second_arr” ellen sugározhatunk, hogy ugyanazt a formát kapjuk. Ennek transzponálása általában 2×3 alakú végterméket eredményez.

import zsibbadt

first_arr = zsibbadt. sor ( [ 12 , 24 , 14 ] )

second_arr = zsibbadt. sor ( [ tizenöt , 22 ] )

nyomtatás ( zsibbadt. átformálni ( first_arr , ( 3 , 1 ) ) * second_arr )

eredmény_arr = zsibbadt. sor ( [ [ 12 , 22 , 31 ] , [ tizenöt , 22 , Négy öt ] ] )

nyomtatás ( result_arr + first_arr )

nyomtatás ( ( eredmény_arr. T + second_arr ) . T )

nyomtatás ( result_arr + numpy. átformálni ( second_arr , ( két , 1 ) ) )

nyomtatás ( result_arr * két )

A kimenetet alább tekintheti meg.

3. példa:

Egy háromdimenziós tömb sugározható a következő Python programmal. Ebben a példában két „first_arr” és „second_arr” nevű tömb jött létre. A „first_arr” tömb [4,13,26,12], a „second_arr” pedig [32,67,45,17] értékeket tartalmaz. A kezdeti tömb 2-dimenziója különbséget jelent. Az első és a második tömb összege lent jelenik meg a kód végrehajtása után. Láthatja, hogy a kódban három nyomtatott utasítás található, amelyek mindegyike a „First array:”, a „Second array” és a „Third array:” szöveget jeleníti meg felváltva. Ekkor megjelenik ennek a két újonnan generált tömbnek az összege.

import zsibbadt

first_arr = zsibbadt. sor ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Négy öt , 17 ] ] )

second_arr = zsibbadt. sor ( [ 24 , Négy öt , 66 , 87 ] )

nyomtatás ( ' \n Első tömb: ' )

nyomtatás ( first_arr )

nyomtatás ( ' \n Második tömb: ' )

nyomtatás ( second_arr )

nyomtatás ( ' \n Az első és a második tömb összege: ' )

összeg_eredmény = first_arr + second_arr ;

nyomtatás ( összeg_eredmény )

Itt van az adott kód kimeneti képernyőképe.

4. példa:

Itt látható az utolsó Python-program, amely háromdimenziós tömböt sugároz. Ebben a programban két tömb van megadva, amelyek közül az első háromdimenziós. Az első és a második tömb összege a fent látható módon jelenik meg a kód végrehajtása után. Bár az értékek ezekben a tömbökben változnak, a fennmaradó kód megegyezik a fenti példaprogramban használt kóddal.

import zsibbadt

first_arr = zsibbadt. sor ( [ [ 12 , Négy öt , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ ötven , 40 , 18 , 26 ] ] )

second_arr = zsibbadt. sor ( [ 12 , 44 , 22 , 12 ] )

nyomtatás ( ' \n Első tömb: ' )

nyomtatás ( first_arr )

nyomtatás ( ' \n Második tömb: ' )

nyomtatás ( second_arr )

nyomtatás ( ' \n Az első és a második tömb összege: ' )

összeg_eredmény = first_arr + second_arr ;

nyomtatás ( összeg_eredmény )

Az alábbi ábrán látható, hogy az első tömbből egy 3-dimenziós tömb jelenik meg, ezt követi a második tömb 2-dimenziós tömbje, és ennek a kettőnek az eredménye a műsorszórási elvet alkalmazva.

Következtetés

Ez a cikk a műsorszórást, a Python kulcsfontosságú koncepcióját tárgyalja. A NumPy-ban a „műsorszórás” kifejezés arra a képességre utal, hogy különböző alakú tömböket kezelhetünk, miközben gyakran végrehajtott aritmetikai műveleteket hajtunk végre. A fent említett témát számos példával alaposan körbejártuk. Ez a cikk az említett példaprogramokat használta annak bemutatására, hogyan lehet 1-D, 2-D, illetve 3D tömbökön sugározni. Megpróbálhatja futtatni ezeket a példákat a rendszerén, és megtekintheti az eredményeket, hogy jobban megértse, hogyan működik általában minden.