NumPy Broadcasting

Numpy Broadcasting



Erikokoisia taulukoita ei voi lisätä, vähentää tai muuten käyttää aritmetiikassa. Yksi tapa on monistaa pieni taulukko, jotta sille saadaan samat mitat ja koko kuin suuremmalle taulukolle. Kun suoritetaan taulukkoaritmetiikkaa, NumPy tarjoaa taulukkolähetyksenä tunnetun ominaisuuden, joka voi merkittävästi lyhentää ja yksinkertaistaa koodia. Tässä opetusohjelmassa opit taulukkolähetyksen ideasta ja sen käyttämisestä NumPyssa. Lisäksi tarjolla on useita esimerkkiohjelmia.

Mikä on NumPy Broadcasting?

Kun suoritetaan aritmeettisia operaatioita erimuotoisille taulukoille, NumPy viittaa tähän yleislähetykseen. Nämä taulukkooperaatiot suoritetaan usein vastaaville elementeille. Jos kahdella taulukolla on sama muoto, se voidaan tehdä niille helposti. Vaikka tämä konsepti on hyödyllinen, lähetystä ei aina suositella, koska se voi johtaa tehottomaan muistin käyttöön, mikä hidastaa laskentaa. NumPy-toiminnot suoritetaan usein taulukkopareille, jotka on jaoteltu elementeiltä.

Lähetyksen säännöt

Lähetyksessä on noudatettava tiettyjä ohjeita. Nämä on kuvattu alla:







  1. Alemman järjestyksen taulukon muoto on tärkeää lisätä ykkösillä, kunnes taulukoiden molemmat muodot jakavat saman pituuden, jos kahdella taulukolla ei ole sama arvo.
  2. Kahden taulukon katsotaan olevan yhteensopivia, jos niillä on sama mittakoko tai jos toisen mitan koko on 1.
  3. Matriisit voidaan lähettää yhdessä vain, jos niiden koot ja mitat vastaavat.
  4. Kun lähetys on valmis, jokainen matriisi toimii ikään kuin sen muoto vastaa kahden syötetaulukon muotojen suurimman elementin muotoa.
  5. Yksi taulukoista käyttäytyy ikään kuin se olisi replikoitu tällä dimensiolla, jos toisen taulukon ulottuvuus on suurempi kuin 1 ja ensimmäisen taulukon ulottuvuus on 1.

Keskustellaan nyt joistakin esimerkeistä lähetyskonseptin toteuttamisesta.



Esimerkki 1:

Taulupareissa NumPy-toiminnot suoritetaan tyypillisesti elementti kerrallaan. Näillä kahdella taulukolla on oltava yksinkertaisimmassa skenaariossa sama muoto, kuten alla olevassa esimerkissä:



tuonti nuhjuinen

yksi_arr = nuhjuinen. joukko ( [ 2.0 , 3.0 , 1.0 ] )

kaksi_arr = nuhjuinen. joukko ( [ 3.0 , 3.0 , 3.0 ] )

Tulosta ( yksi_joukko * kaksi_arr )





Kuten yllä olevasta koodista näet, meillä on kaksi taulukkoa: 'one_arr' ja 'two_ arr'. Jokaisella niistä on omat arvot. Arvot 'one_arr' ovat [2.0,3.0,1.0] ja kaksi _arr ovat [3.0,3.0,3.0]. Sitten voit nähdä, että näiden kahden taulukon tulon laskeminen on seuraava:



Kun taulukoiden lomakkeet täyttävät tietyt vaatimukset, NumPyn lähetyssääntö pienentää tätä rajoitusta. Kun taulukko ja skalaariarvo liitetään operaatioon, yleislähetys esitetään sen perusmuodossa. Kuten näet, 3 sisältyy muuttujaan nimeltä 'two_arr'.

tuonti nuhjuinen

yksi_arr = nuhjuinen. joukko ( [ 2.0 , 3.0 , 1.0 ] )

kaksi_arr = 3.0

Tulosta ( yksi_joukko * kaksi_arr )

Yllä oleva koodi tuottaa seuraavan tuloksen.

Edellisessä esimerkissä, jossa 'two_arr' oli taulukko, tulos on sama. Voimme kuvitella, että skalaari 'two_arr' laajenee aritmeettisen prosessin aikana taulukoksi, jolla on sama muoto kuin 'one _arr'. Taulukko 'two_arr' sisältää uusia elementtejä, jotka ovat vain kaksoiskappaleita ensimmäisestä skalaarista. Venytysvertailu on vain hypoteettinen. Jotta lähetystoiminnot olisivat niin muistia ja laskennallisesti taloudellisia kuin mahdollista, NumPy on tarpeeksi älykäs käyttämään alkuperäistä skalaariarvoa kopioiden sijaan.

Esimerkki 2:

Tässä on toinen yksinkertainen Python-ohjelma, joka suorittaa lähetyksen. Jälleen kerran luodaan kaksi taulukkoa, jotka sisältävät eri arvoja. On välttämätöntä muotoilla 'first_arr' sarakevektoriksi, jonka muoto on 3 × 1 ulkotulon laskemiseksi. Tämän jälkeen lähetys suoritetaan 'second_arr' -arvoa vastaan, jotta saadaan tulos, jonka koko on 3 × 2, joka tunnetaan 'first_arr'- ja 'second_arr'-ulkotulona. Lähetys 2x3:een on mahdollista, koska 'result_arr' on muotoa 2 ×3 sekä muoto (3,).

Kun kaikki edellä mainitut vaiheet on suoritettu, vektori on sisällytettävä jokaiseen matriisien sarakkeeseen, jotka ovat 'result_arr' ja 'second_arr'. Niiden mitat ovat 2×3 ja (2, ). Transponoimalla 'result_arr' saadaan muoto 3×2, joka voidaan sitten lähettää vastaan ​​'second_arr', jolloin saadaan sama muoto. Tyypillisesti tämän transponointi tuottaa lopputuotteen, jonka muoto on 2 × 3.

tuonti nuhjuinen

ensimmäinen_arr = nuhjuinen. joukko ( [ 12 , 24 , 14 ] )

toinen_arr = nuhjuinen. joukko ( [ viisitoista , 22 ] )

Tulosta ( nuhjuinen. muotoilla uudelleen ( ensimmäinen_arr , ( 3 , 1 ) ) * toinen_arr )

tulos_arr = nuhjuinen. joukko ( [ [ 12 , 22 , 31 ] , [ viisitoista , 22 , Neljä viisi ] ] )

Tulosta ( tulos_arr + ensimmäinen_arr )

Tulosta ( ( tulos_arr. T + toinen_arr ) . T )

Tulosta ( tulos_arr + numpy. muotoilla uudelleen ( toinen_arr , ( kaksi , 1 ) ) )

Tulosta ( tulos_arr * kaksi )

Voit katsoa tuotoksen alta.

Esimerkki 3:

Kolmiulotteinen taulukko voidaan lähettää käyttämällä seuraavaa Python-ohjelmaa. Tässä esimerkissä on luotu kaksi taulukkoa nimeltä 'first_arr' ja 'second_arr'. Taulukko 'first_arr' sisältää [4,13,26,12] arvoa ja 'second_arr' sisältää [32,67,45,17] arvoa. Alkuperäisen taulukon 2-ulottuvuus vaikuttaa. Ensimmäisen ja toisen taulukon summa näytetään alla, kun koodi on suoritettu. Voit nähdä, että koodissa on kolme tulostuslausetta, joista jokaisessa näkyy teksti 'First array:', 'Second array' ja 'Third array:'. Näiden kahden uuden luodun taulukon summa näytetään sitten.

tuonti nuhjuinen

ensimmäinen_arr = nuhjuinen. joukko ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Neljä viisi , 17 ] ] )

toinen_arr = nuhjuinen. joukko ( [ 24 , Neljä viisi , 66 , 87 ] )

Tulosta ( ' \n Ensimmäinen taulukko: ' )

Tulosta ( ensimmäinen_arr )

Tulosta ( ' \n Toinen ryhmä: ' )

Tulosta ( toinen_arr )

Tulosta ( ' \n Ensimmäisen ja toisen taulukon summa: ' )

summa_tulos = ensimmäinen_joukko + toinen_saa ;

Tulosta ( summa_tulos )

Tässä on ulostulon kuvakaappaus annetusta koodista.

Esimerkki 4:

Tässä on viimeinen Python-ohjelma, joka lähettää kolmiulotteisen taulukon. Tässä ohjelmassa on määritetty kaksi taulukkoa, joista ensimmäisellä on kolme ulottuvuutta. Ensimmäisen ja toisen taulukon summa näytetään yllä esitetyllä tavalla, kun koodi on suoritettu. Vaikka arvot näissä taulukoissa vaihtelevat, jäljellä oleva koodi on sama kuin yllä olevassa esimerkkiohjelmassa käytetty.

tuonti nuhjuinen

ensimmäinen_arr = nuhjuinen. joukko ( [ [ 12 , Neljä viisi , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ viisikymmentä , 40 , 18 , 26 ] ] )

toinen_arr = nuhjuinen. joukko ( [ 12 , 44 , 22 , 12 ] )

Tulosta ( ' \n Ensimmäinen taulukko: ' )

Tulosta ( ensimmäinen_arr )

Tulosta ( ' \n Toinen ryhmä: ' )

Tulosta ( toinen_arr )

Tulosta ( ' \n Ensimmäisen ja toisen taulukon summa: ' )

summa_tulos = ensimmäinen_joukko + toinen_saa ;

Tulosta ( summa_tulos )

Alla olevasta kuvasta näkyy, että 3-ulotteinen taulukko esitetään ensimmäisestä taulukosta, jota seuraa 2-ulotteinen matriisi toisesta taulukosta ja näiden kahden tulos yleislähetysperiaatetta käyttäen.

Johtopäätös

Tässä artikkelissa käsiteltiin lähetystä, joka on tärkeä Python-konsepti. NumPyssä termi 'lähetys' viittaa kykyyn käsitellä erimuotoisia ryhmiä suoritettaessa usein suoritettavia aritmeettisia operaatioita. Edellä mainittua aihetta on käsitelty perusteellisesti useilla esimerkeillä. Tässä artikkelissa käytettiin mainittuja esimerkkiohjelmia osoittamaan, kuinka lähetetään 1-D-, 2-D- ja 3-D-taulukoissa. Voit yrittää suorittaa nämä esimerkit järjestelmässäsi ja tarkastella tuloksia ymmärtääksesi paremmin, miten kaikki toimii yleisesti.