Broadcasting
Før du går i gang med matematiske operationer i NumPy, er det vigtigt at forstå et centralt begreb – broadcasting.
Broadcasting er en metode til at tilpasse formaterne på arrays, så aritmetiske operationer kan udføres uden manuel omformning. Broadcasting justerer automatisk formaterne på arrays.
Når NumPy arbejder med to arrays, kontrollerer den deres formater for kompatibilitet for at afgøre, om de kan broadcastes sammen.
Hvis to arrays allerede har 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 på de to arrays startende fra den højrestillede dimension og bevæger sig mod venstre. Det vil sige, at den først sammenligner 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 arrays broadcastes, hvilket resulterer i en standard additionsoperation mellem matricer med samme form, som udføres elementvist.
123456789import 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)
array_2 oprettes som et 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 det som et 1D array med formen (3,)?
Forskelligt antal dimensioner
Når det ene array har færre dimensioner end det andet, behandles de manglende dimensioner som værende af størrelsen 1. For eksempel, overvej to arrays med formerne (2, 3) og (3,). Her gælder 3 = 3, og den manglende venstre dimension betragtes som 1, så formen (3,) bliver til (1, 3). Da formerne (2, 3) og (1, 3) er kompatible, kan disse to arrays broadcastes.
123456789import 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 skalarer
Ud over matematiske operationer med arrays kan der også udføres lignende operationer mellem et array og en skalar (et tal) takket være broadcasting. I dette tilfælde kan arrayet have vilkårlig form, da en skalar grundlæggende ikke har nogen form, og alle dens dimensioner betragtes som 1. Derfor er formaterne altid kompatible.
123456import 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)
Uforenelige former
Lad os også overveje et eksempel med uforenelige former, hvor en aritmetisk operation ikke kan udføres, fordi broadcasting ikke er mulig:
Vi har et 2x3 array og et 1D-array med længden 2, dvs. en form på (2,). Den manglende dimension betragtes som 1, så formene bliver (2, 3) og (1, 2).
Fra venstre mod højre: 3 != 2, så vi har straks uforenelige dimensioner, og dermed uforenelige former. Hvis vi forsøger at køre koden, vil vi få en fejl:
12345678import 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!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.7
Broadcasting
Stryg for at vise menuen
Før du går i gang med matematiske operationer i NumPy, er det vigtigt at forstå et centralt begreb – broadcasting.
Broadcasting er en metode til at tilpasse formaterne på arrays, så aritmetiske operationer kan udføres uden manuel omformning. Broadcasting justerer automatisk formaterne på arrays.
Når NumPy arbejder med to arrays, kontrollerer den deres formater for kompatibilitet for at afgøre, om de kan broadcastes sammen.
Hvis to arrays allerede har 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 på de to arrays startende fra den højrestillede dimension og bevæger sig mod venstre. Det vil sige, at den først sammenligner 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 arrays broadcastes, hvilket resulterer i en standard additionsoperation mellem matricer med samme form, som udføres elementvist.
123456789import 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)
array_2 oprettes som et 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 det som et 1D array med formen (3,)?
Forskelligt antal dimensioner
Når det ene array har færre dimensioner end det andet, behandles de manglende dimensioner som værende af størrelsen 1. For eksempel, overvej to arrays med formerne (2, 3) og (3,). Her gælder 3 = 3, og den manglende venstre dimension betragtes som 1, så formen (3,) bliver til (1, 3). Da formerne (2, 3) og (1, 3) er kompatible, kan disse to arrays broadcastes.
123456789import 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 skalarer
Ud over matematiske operationer med arrays kan der også udføres lignende operationer mellem et array og en skalar (et tal) takket være broadcasting. I dette tilfælde kan arrayet have vilkårlig form, da en skalar grundlæggende ikke har nogen form, og alle dens dimensioner betragtes som 1. Derfor er formaterne altid kompatible.
123456import 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)
Uforenelige former
Lad os også overveje et eksempel med uforenelige former, hvor en aritmetisk operation ikke kan udføres, fordi broadcasting ikke er mulig:
Vi har et 2x3 array og et 1D-array med længden 2, dvs. en form på (2,). Den manglende dimension betragtes som 1, så formene bliver (2, 3) og (1, 2).
Fra venstre mod højre: 3 != 2, så vi har straks uforenelige dimensioner, og dermed uforenelige former. Hvis vi forsøger at køre koden, vil vi få en fejl:
12345678import 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!