Kursusindhold
Ultimativ NumPy
Ultimativ NumPy
Udsendelse
Før vi dykker ned i matematiske operationer i NumPy, er det vigtigt at forstå et nøglekoncept — broadcasting.
Når NumPy arbejder med to arrays, tjekker det deres former for kompatibilitet for at afgøre, om de kan broadcastes sammen.
Bemærk
Hvis to arrays allerede har den samme form, er broadcasting ikke nødvendig.
Samme Antal Dimensioner
Antag, at vi har to arrays, som vi ønsker at udføre addition på, med følgende former: (2, 3)
og (1, 3)
. NumPy sammenligner formerne af de to arrays startende fra den højre dimension og bevæger sig til venstre. Det vil sige, det sammenligner først 3 og 3, derefter 2 og 1.
To dimensioner betragtes som kompatible, hvis de er lige eller hvis en af dem er 1:
For dimensionerne 3 og 3 er de kompatible, fordi de er lige;
For dimensionerne 2 og 1 er de kompatible, fordi en af dem er 1.
Da alle dimensioner er kompatible, betragtes formerne som kompatible. Derfor kan arraysene broadcastes, hvilket resulterer i en standard additionsoperation mellem matricer af samme form, som udføres elementvis.
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Bemærk
array_2
er oprettet som en 2D array, der kun indeholder én række, hvilket er grunden til, at dens form er(1, 3)
.
Men hvad ville der ske, hvis vi oprettede den som en 1D array med en form på (3,)
?
Forskelligt Antal Dimensioner
Når en array har færre dimensioner end den anden, behandles de manglende dimensioner som om de har en størrelse på 1. For eksempel, overvej to arrays med formerne (2, 3)
og (3,)
. Her er 3 = 3, og den manglende venstre dimension betragtes som 1, så formen (3,)
bliver (1, 3)
. Da formerne (2, 3)
og (1, 3)
er kompatible, kan disse to arrays broadcastes.
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Broadcasting af skalærer
Udover matematiske operationer med arrays, kan vi også udføre lignende operationer mellem et array og en skalær (tal) takket være broadcasting. I dette tilfælde kan arrayet have enhver form, da en skalær i det væsentlige ikke har nogen form, og alle dens dimensioner betragtes som 1. Derfor er formene altid kompatible.
import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Inkompatible Former
Lad os også overveje et eksempel på inkompatible former, hvor en aritmetisk operation ikke kan udføres, fordi broadcasting ikke er mulig:
Vi har en 2x3
matrix og en 1D matrix med længden 2
, dvs. en form på (2,)
. Den manglende dimension betragtes som 1, så formene bliver (2, 3)
og (1, 2)
.
Bevæger sig fra venstre mod højre: 3 != 2, så vi har straks uforenelige dimensioner, og derfor uforenelige former. Hvis vi forsøger at køre koden, vil vi få en fejl:
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Tak for dine kommentarer!