NumPy Broadcasting

Numpy Broadcasting



Matricele de dimensiuni diferite nu pot fi adăugate, scăzute sau utilizate în alt mod în aritmetică. Duplicarea matricei de mici pentru a-i oferi aceleași dimensiuni și dimensiuni ca și matricea mai mare este o abordare. Când efectuează aritmetica matrice, NumPy oferă o caracteristică cunoscută sub numele de difuzare matrice care poate scurta și simplifica semnificativ codul. Veți afla despre ideea de difuzare a matricei și cum să o utilizați în NumPy în acest tutorial. În plus, sunt furnizate câteva exemple de programe.

Ce este NumPy Broadcasting?

Când se efectuează operații aritmetice pe matrice de diferite forme, NumPy se referă la aceasta ca difuzare. Aceste operații de matrice sunt efectuate frecvent asupra elementelor respective. Dacă două matrice au aceeași formă, se poate face cu ușurință pe ele. Chiar dacă acest concept este util, difuzarea nu este întotdeauna recomandată, deoarece poate duce la o utilizare ineficientă a memoriei care încetinește calculul. Operațiile NumPy sunt adesea efectuate pe perechi de matrice care sunt defalcate element cu element.

Regulile de difuzare

Un anumit set de linii directoare trebuie urmat la difuzare. Acestea sunt descrise mai jos:







  1. Forma matricei de rang inferior este important să fie prefixată cu 1 până când ambele forme ale matricelor împart aceeași lungime dacă două matrice nu au același rang.
  2. Două matrice sunt considerate a fi compatibile dacă au aceeași dimensiune de dimensiune sau dacă una dintre ele are dimensiunea setată la 1.
  3. Matricele pot fi difuzate împreună numai dacă dimensiunile și dimensiunile lor se potrivesc.
  4. Odată ce difuzarea este completă, fiecare matrice acționează ca și cum forma sa se potrivește cu cea a celui mai mare element din formele celor două matrice de intrare.
  5. Una dintre matrice se comportă ca și cum ar fi fost replicată cu acea dimensiune dacă cealaltă matrice are o dimensiune mai mare decât 1 și prima matrice are o dimensiune de 1.

Acum, să discutăm câteva exemple de implementare a conceptului de difuzare.



Exemplul 1:

Pe perechi de tablouri, operațiunile NumPy sunt de obicei efectuate element cu element. Cele două matrice trebuie, în cel mai simplu scenariu, să aibă aceeași formă, ca în exemplul de mai jos:



import numpy

one_arr = numpy. matrice ( [ 2.0 , 3.0 , 1.0 ] )

doi_arr = numpy. matrice ( [ 3.0 , 3.0 , 3.0 ] )

imprimare ( one_arr * doi_arr )





După cum puteți vedea din codul de mai sus, avem două matrice: „one_arr” și „two_ arr”. Fiecare dintre ele are un set separat de valori. Valorile din „one_arr” sunt [2.0,3.0,1.0] și „două _arr” sunt [3.0,3.0,3.0]. Apoi puteți vedea că rezultatul calculării produsului acestor două matrice este următorul:



Când anumite cerințe sunt îndeplinite de formele matricelor, regula de difuzare a NumPy reduce această restricție. Atunci când o matrice și o valoare scalară sunt unite într-o operație, difuzarea este demonstrată în forma sa cea mai de bază. După cum puteți vedea, 3 este conținut în variabila numită „two_arr”.

import numpy

one_arr = numpy. matrice ( [ 2.0 , 3.0 , 1.0 ] )

doi_arr = 3.0

imprimare ( one_arr * doi_arr )

Codul de mai sus produce următorul rezultat.

În exemplul precedent, unde „two_arr” a fost o matrice, rezultatul este echivalent. Ne putem imagina că scalarul „two_arr” este extins în timpul procesului aritmetic într-o matrice având aceeași formă ca „one _arr”. Matricea „two_arr” conține elemente noi care sunt doar duplicate ale primului scalar. Comparația de întindere este doar ipotetică. Pentru a face operațiunile de difuzare ca memorie și economice din punct de vedere computațional pe cât de fezabile, NumPy este suficient de inteligent pentru a utiliza valoarea scalară originală în loc să producă copii.

Exemplul 2:

Iată un alt program Python simplu care efectuează difuzarea. Din nou, sunt create două matrice care conțin valori diferite. Este necesar să remodelați „first_arr” într-un vector coloană cu o formă de 3×1 pentru a calcula un produs exterior. După aceasta, difuzarea este efectuată împotriva „second_arr” pentru a oferi un rezultat de dimensiunea 3×2, cunoscut ca produsul exterior al „first_arr” și „second_arr”. Difuzarea la 2×3 este posibilă, deoarece „result_arr” are forma 2 ×3 precum și forma (3,).

După parcurgerea tuturor pașilor menționați mai sus, un vector trebuie inclus în fiecare coloană a matricelor care sunt „result_arr” și „second_arr”. Acestea au dimensiuni de 2×3 și (2, ). Transpunerea „result_arr” va produce o formă de 3×2, care poate fi apoi difuzată împotriva „second_arr” pentru a obține aceeași formă. În mod obișnuit, prin transpunerea acestui rezultat se obține un produs final în forma 2×3.

import numpy

primul_arr = numpy. matrice ( [ 12 , 24 , 14 ] )

secund_arr = numpy. matrice ( [ cincisprezece , 22 ] )

imprimare ( numpy. remodela ( primul_arr , ( 3 , 1 ) ) * second_arr )

result_arr = numpy. matrice ( [ [ 12 , 22 , 31 ] , [ cincisprezece , 22 , Patru cinci ] ] )

imprimare ( result_arr + first_arr )

imprimare ( ( result_arr. T + second_arr ) . T )

imprimare ( result_arr + numpy. remodela ( secund_arr , ( Două , 1 ) ) )

imprimare ( result_arr * Două )

Puteți vizualiza rezultatul de mai jos.

Exemplul 3:

O matrice tridimensională poate fi difuzată folosind următorul program Python. În acest exemplu, au fost generate două matrice numite „first_arr” și „second_arr”. Matricea „first_arr” conține valori [4,13,26,12] iar „second_arr” conține valori [32,67,45,17]. Cele 2 dimensiuni ale matricei inițiale fac diferența. Suma primului și a celui de-al doilea tablou va fi afișată mai jos după ce codul a fost executat. Puteți vedea că avem trei instrucțiuni de tipărire în cod, fiecare dintre acestea afișând textul „Primul tablou:”, „Al doilea tablou” și „Third array:” pe rând. Se arată apoi suma acestor două tablouri nou generate.

import numpy

primul_arr = numpy. matrice ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Patru cinci , 17 ] ] )

secund_arr = numpy. matrice ( [ 24 , Patru cinci , 66 , 87 ] )

imprimare ( ' \n Prima matrice: ' )

imprimare ( primul_arr )

imprimare ( ' \n A doua matrice: ' )

imprimare ( secund_arr )

imprimare ( ' \n Suma primei și a doua matrice: ' )

suma_rezultat = first_arr + second_arr ;

imprimare ( suma_rezultat )

Iată captura de ecran de ieșire a codului dat.

Exemplul 4:

Ultimul program Python care difuzează o matrice tridimensională este prezentat aici. În acest program sunt specificate două matrice, prima având trei dimensiuni. Suma primului și a celui de-al doilea tablou va fi afișată așa cum se arată mai sus după ce codul a fost executat. Deși valorile din aceste matrice variază, codul rămas este același cu cel folosit în exemplul de program de mai sus.

import numpy

primul_arr = numpy. matrice ( [ [ 12 , Patru cinci , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ cincizeci , 40 , 18 , 26 ] ] )

secund_arr = numpy. matrice ( [ 12 , 44 , 22 , 12 ] )

imprimare ( ' \n Prima matrice: ' )

imprimare ( primul_arr )

imprimare ( ' \n A doua matrice: ' )

imprimare ( secund_arr )

imprimare ( ' \n Suma primei și a doua matrice: ' )

suma_rezultat = first_arr + second_arr ;

imprimare ( suma_rezultat )

Puteți vedea în figura de mai jos că este prezentată o matrice tridimensională din prima matrice, urmată de o matrice bidimensională din a doua matrice și rezultatul acestor două utilizând principiul difuzării.

Concluzie

Acest articol a discutat despre difuzare, un concept Python crucial. În NumPy, termenul „difuzare” se referă la capacitatea de a gestiona rețele de diferite forme în timp ce se efectuează operații aritmetice care sunt efectuate frecvent. Subiectul menționat mai sus a fost acoperit în detaliu cu o varietate de exemple. Acest articol a folosit exemplele de programe menționate pentru a demonstra cum să difuzați pe matrice 1-D, 2-D și, respectiv, 3-D. Puteți încerca să rulați aceste exemple pe sistemul dvs. și să vizualizați rezultatele pentru a înțelege mai bine cum funcționează totul în general.