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:
- 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.
- Két tömb akkor tekinthető kompatibilisnek, ha a méretük megegyezik, vagy ha az egyik méretmérete 1.
- A tömbök csak akkor sugározhatók együtt, ha méretük és méretük megegyezik.
- 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.
- 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 zsibbadtegy_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 zsibbadtfirst_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 zsibbadtfirst_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 zsibbadtfirst_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.