NumPy Broadcasting

Numpy Broadcasting



Matriser av forskjellig størrelse kan ikke legges til, trekkes fra eller på annen måte brukes i aritmetikk. Å duplisere utvalget av små for å gi det samme dimensjoner og størrelse som det større utvalget er én tilnærming. Når du utfører array-aritmetikk, tilbyr NumPy en funksjon kjent som array broadcasting som kan forkorte og forenkle koden din betydelig. Du vil lære om ideen om array-kringkasting og hvordan du bruker den i NumPy i denne opplæringen. I tillegg finnes det flere eksempelprogrammer.

Hva er NumPy Broadcasting?

Når du utfører aritmetiske operasjoner på arrays av forskjellige former, refererer NumPy til dette som kringkasting. Disse array-operasjonene utføres ofte på de respektive elementene. Hvis to arrays har samme form, kan det enkelt gjøres på dem. Selv om dette konseptet er nyttig, anbefales ikke kringkasting alltid fordi det kan føre til ineffektiv minnebruk som bremser beregningen. NumPy-operasjoner utføres ofte på array-par som er brutt ned element for element.

Regler for kringkasting

Et bestemt sett med retningslinjer må følges ved sending. Disse er beskrevet nedenfor:







  1. Den lavere rangerte matriseformen er viktig å ha 1-er på forhånd inntil begge formene til matrisene deler samme lengde hvis to matriser ikke har samme rangering.
  2. To arrays anses å være kompatible hvis de har samme dimensjonsstørrelse eller hvis en av dem har dimensjonsstørrelsen satt til 1.
  3. Matrisene kan bare kringkastes sammen hvis størrelsene og dimensjonene samsvarer.
  4. Når kringkastingen er fullført, fungerer hver matrise som om formen samsvarer med det største elementet i formen til de to inngangsmatrisene.
  5. En av matrisene oppfører seg som om den ble replikert med den dimensjonen hvis den andre matrisen har en dimensjon større enn 1 og den første matrisen har en dimensjon på 1.

La oss nå diskutere noen eksempler på implementering av konseptet kringkasting.



Eksempel 1:

På par med arrayer utføres NumPy-operasjoner vanligvis element-for-element. De to matrisene må, i det enkleste scenariet, ha samme form, som i eksemplet nedenfor:



import nusset

one_arr = nusset. array ( [ 2.0 , 3.0 , 1.0 ] )

to_arr = nusset. array ( [ 3.0 , 3.0 , 3.0 ] )

skrive ut ( en_arr * to_arr )





Som du kan se fra koden ovenfor, har vi to matriser: «one_arr» og «two_ arr». Hver av dem har et eget sett med verdier. Verdiene i «one_arr» er [2.0,3.0,1.0] og «two _arr» er [3.0,3.0,3.0]. Du kan da se at resultatet av å beregne produktet av disse to matrisene er som følger:



Når visse krav oppfylles av matrisens skjemaer, senker NumPys kringkastingsregel denne begrensningen. Når en matrise og en skalarverdi slås sammen i en operasjon, demonstreres kringkasting i sin mest grunnleggende form. Som du kan se, er 3 inneholdt i variabelen kalt 'two_arr.'

import nusset

one_arr = nusset. array ( [ 2.0 , 3.0 , 1.0 ] )

to_arr = 3.0

skrive ut ( en_arr * to_arr )

Koden ovenfor gir følgende resultat.

I det foregående eksemplet, der «two_arr» var en matrise, er utfallet ekvivalent. Vi kan forestille oss at skalaren 'two_arr' utvides under den aritmetiske prosessen til en matrise som har samme form som 'one _arr.' Matrisen 'two_arr' inneholder nye elementer som bare er duplikater av den første skalaren. Strekksammenligningen er bare hypotetisk. For å gjøre kringkastingsoperasjoner så minne og beregningsøkonomiske som mulig, er NumPy smart nok til å bruke den originale skalarverdien i stedet for å produsere kopier.

Eksempel 2:

Her er et annet enkelt Python-program som utfører kringkasting. Nok en gang opprettes to arrays som inneholder forskjellige verdier. Det er nødvendig å omforme ‘first_arr’ til en kolonnevektor med en 3×1-form for å beregne et ytre produkt. Etter dette utføres kringkastingen mot 'second_arr' for å gi et resultat av størrelsen 3×2, kjent som det ytre produktet av 'first_arr' og 'second_arr.' Det er mulig å kringkaste til 2×3 siden 'result_arr' har formen 2 ×3 samt formen (3,).

Etter å ha fulgt alle de ovennevnte trinnene, må en vektor inkluderes i hver kolonne av matrisene som er 'result_arr' og 'second_arr.' Disse har dimensjonene 2×3 og (2, ). Transponering av 'result_arr' vil gi en form på 3×2, som deretter kan kringkastes mot 'second_arr' for å få samme form. Vanligvis gir transponering av dette et sluttprodukt i formen 2×3.

import nusset

first_arr = nusset. array ( [ 12 , 24 , 14 ] )

andre_arr = nusset. array ( [ femten , 22 ] )

skrive ut ( nusset. omforme ( first_arr , ( 3 , 1 ) ) * second_arr )

resultat_arr = nusset. array ( [ [ 12 , 22 , 31 ] , [ femten , 22 , Fire fem ] ] )

skrive ut ( resultat_arr + første_arr )

skrive ut ( ( resultat_arr. T + second_arr ) . T )

skrive ut ( result_arr + numpy. omforme ( andre_arr , ( to , 1 ) ) )

skrive ut ( resultat_arr * to )

Du kan se utgangen nedenfor.

Eksempel 3:

En tredimensjonal matrise kan kringkastes ved å bruke følgende Python-program. I dette eksemplet er det generert to arrays kalt 'first_arr' og 'second_arr'. Arrayen 'first_arr' inneholder [4,13,26,12] verdier og 'second_arr' inneholder [32,67,45,17] verdier. Den innledende matrisens 2-dimensjoner gjør en forskjell. Summen av den første og andre matrisen vises nedenfor etter at koden er utført. Du kan se at vi har tre utskriftssetninger i koden, som hver viser teksten 'First array:', 'Second array' og 'Third array:' etter tur. Summen av disse to nylig genererte matrisene vises deretter.

import nusset

first_arr = nusset. array ( [ [ 4 , 1. 3 , 26 , 12 ] , [ 32 , 67 , Fire fem , 17 ] ] )

andre_arr = nusset. array ( [ 24 , Fire fem , 66 , 87 ] )

skrive ut ( ' \n Første array: ' )

skrive ut ( first_arr )

skrive ut ( ' \n Andre array: ' )

skrive ut ( andre_arr )

skrive ut ( ' \n Summen av første og andre matrise: ' )

sum_result = første_arr + andre_arr ;

skrive ut ( sum_result )

Her er utdataskjermbildet av den gitte koden.

Eksempel 4:

Det siste Python-programmet som kringkaster en tredimensjonal matrise er gitt her. To matriser er spesifisert i dette programmet, hvorav den første har tre dimensjoner. Summen av den første og andre matrisen vises som vist ovenfor etter at koden er utført. Selv om verdiene i disse matrisene varierer, er den gjenværende koden den samme som den som ble brukt i eksempelprogrammet ovenfor.

import nusset

first_arr = nusset. array ( [ [ 12 , Fire fem , 22 , 1. 3 ] , [ 22 , 54 , 25 , 12 ] , [ femti , 40 , 18 , 26 ] ] )

andre_arr = nusset. array ( [ 12 , 44 , 22 , 12 ] )

skrive ut ( ' \n Første array: ' )

skrive ut ( first_arr )

skrive ut ( ' \n Andre array: ' )

skrive ut ( andre_arr )

skrive ut ( ' \n Summen av første og andre matrise: ' )

sum_result = første_arr + andre_arr ;

skrive ut ( sum_result )

Du kan se i figuren nedenfor at en 3-dimensjonal matrise fra den første matrisen er presentert, etterfulgt av en 2-dimensjonal matrise fra den andre matrisen og resultatet av at disse to bruker kringkastingsprinsippet.

Konklusjon

Denne artikkelen diskuterte kringkasting, et avgjørende Python-konsept. I NumPy refererer begrepet 'kringkasting' til kapasiteten til å håndtere arrays av forskjellige former mens du utfører aritmetiske operasjoner som ofte utføres. Det nevnte emnet har blitt grundig dekket med en rekke eksempler. Denne artikkelen brukte de nevnte eksempelprogrammene for å demonstrere hvordan man kringkaster på henholdsvis 1-D, 2-D og 3-D-matriser. Du kan prøve å kjøre disse eksemplene på systemet ditt og se resultatene for bedre å forstå hvordan alt fungerer generelt.