Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Broadcasting | Matematik med NumPy
Ultimate NumPy

bookBroadcasting

Før du går i gang med matematiske operationer i NumPy, er det vigtigt at forstå et centralt begreb – broadcasting.

Note
Definition

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.

Note
Bemærk

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.

123456789
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)
copy
Note
Bemærk

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.

123456789
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)
copy

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.

123456
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)
copy

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:

12345678
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)
copy
question mark

Vælg alle arrays med kompatible former:

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

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

bookBroadcasting

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.

Note
Definition

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.

Note
Bemærk

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.

123456789
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)
copy
Note
Bemærk

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.

123456789
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)
copy

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.

123456
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)
copy

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:

12345678
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)
copy
question mark

Vælg alle arrays med kompatible former:

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1
some-alt