Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Sändning | Matematik med NumPy
Ultimata NumPy

bookSändning

Innan du fördjupar dig i matematiska operationer i NumPy är det viktigt att förstå ett nyckelbegrepp – broadcasting.

Note
Definition

Broadcasting är ett sätt att anpassa formerna på arrayer för att utföra aritmetiska operationer utan att manuellt ändra deras form. I grunden justerar broadcasting automatiskt formerna på arrayer.

När NumPy arbetar med två arrayer kontrollerar den deras former för kompatibilitet för att avgöra om de kan broadcastas tillsammans.

Note
Observera

Om två arrayer redan har samma form, behövs ingen broadcasting.

Samma antal dimensioner

Antag att vi har två arrayer som vi vill utföra addition på, med följande former: (2, 3) och (1, 3). NumPy jämför formerna på de två arrayerna från den högra dimensionen och rör sig åt vänster. Det vill säga, den jämför först 3 och 3, sedan 2 och 1.

Två dimensioner anses kompatibla om de är lika eller om en av dem är 1:

  • För dimensionerna 3 och 3 är de kompatibla eftersom de är lika;
  • För dimensionerna 2 och 1 är de kompatibla eftersom en av dem är 1.

Eftersom alla dimensioner är kompatibla anses formerna vara kompatibla. Därför kan arrayerna broadcastas, vilket resulterar i en standard additionsoperation mellan matriser med samma form, som utförs elementvis.

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
Notera

array_2 skapas som en 2D-array med endast en rad, vilket gör att dess shape är (1, 3).

Men vad skulle hända om vi skapade den som en 1D-array med shape (3,)?

Olika antal dimensioner

När en array har färre dimensioner än den andra behandlas de saknade dimensionerna som att de har storlek 1. Till exempel, överväg två arrayer med shapes (2, 3) och (3,). Här gäller 3 = 3, och den saknade vänstra dimensionen betraktas som 1, så shape (3,) blir (1, 3). Eftersom shapes (2, 3) och (1, 3) är kompatibla kan dessa två arrayer broadcastas.

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 av skalärer

Förutom matematiska operationer med arrayer kan vi även utföra liknande operationer mellan en array och en skalär (tal) tack vare broadcasting. I detta fall kan arrayen ha vilken form som helst, eftersom en skalär i princip saknar form och alla dess dimensioner anses vara 1. Därför är formerna alltid kompatibla.

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

Inkompatibla former

Låt oss även överväga ett exempel med inkompatibla former, där en aritmetisk operation inte kan utföras eftersom broadcasting inte är möjlig:

Vi har en 2x3-array och en endimensionell array med längd 2, det vill säga en form av (2,). Den saknade dimensionen betraktas som 1, så formerna blir (2, 3) och (1, 2).

Från vänster till höger: 3 != 2, så vi har omedelbart inkompatibla dimensioner, och därmed inkompatibla former. Om vi försöker köra koden får vi ett felmeddelande:

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älj alla arrayer med kompatibla former:

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 1

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you explain more about how broadcasting works with higher-dimensional arrays?

What kind of error message do you get when shapes are incompatible?

Can you give more real-world examples where broadcasting is useful?

Awesome!

Completion rate improved to 3.7

bookSändning

Svep för att visa menyn

Innan du fördjupar dig i matematiska operationer i NumPy är det viktigt att förstå ett nyckelbegrepp – broadcasting.

Note
Definition

Broadcasting är ett sätt att anpassa formerna på arrayer för att utföra aritmetiska operationer utan att manuellt ändra deras form. I grunden justerar broadcasting automatiskt formerna på arrayer.

När NumPy arbetar med två arrayer kontrollerar den deras former för kompatibilitet för att avgöra om de kan broadcastas tillsammans.

Note
Observera

Om två arrayer redan har samma form, behövs ingen broadcasting.

Samma antal dimensioner

Antag att vi har två arrayer som vi vill utföra addition på, med följande former: (2, 3) och (1, 3). NumPy jämför formerna på de två arrayerna från den högra dimensionen och rör sig åt vänster. Det vill säga, den jämför först 3 och 3, sedan 2 och 1.

Två dimensioner anses kompatibla om de är lika eller om en av dem är 1:

  • För dimensionerna 3 och 3 är de kompatibla eftersom de är lika;
  • För dimensionerna 2 och 1 är de kompatibla eftersom en av dem är 1.

Eftersom alla dimensioner är kompatibla anses formerna vara kompatibla. Därför kan arrayerna broadcastas, vilket resulterar i en standard additionsoperation mellan matriser med samma form, som utförs elementvis.

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
Notera

array_2 skapas som en 2D-array med endast en rad, vilket gör att dess shape är (1, 3).

Men vad skulle hända om vi skapade den som en 1D-array med shape (3,)?

Olika antal dimensioner

När en array har färre dimensioner än den andra behandlas de saknade dimensionerna som att de har storlek 1. Till exempel, överväg två arrayer med shapes (2, 3) och (3,). Här gäller 3 = 3, och den saknade vänstra dimensionen betraktas som 1, så shape (3,) blir (1, 3). Eftersom shapes (2, 3) och (1, 3) är kompatibla kan dessa två arrayer broadcastas.

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 av skalärer

Förutom matematiska operationer med arrayer kan vi även utföra liknande operationer mellan en array och en skalär (tal) tack vare broadcasting. I detta fall kan arrayen ha vilken form som helst, eftersom en skalär i princip saknar form och alla dess dimensioner anses vara 1. Därför är formerna alltid kompatibla.

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

Inkompatibla former

Låt oss även överväga ett exempel med inkompatibla former, där en aritmetisk operation inte kan utföras eftersom broadcasting inte är möjlig:

Vi har en 2x3-array och en endimensionell array med längd 2, det vill säga en form av (2,). Den saknade dimensionen betraktas som 1, så formerna blir (2, 3) och (1, 2).

Från vänster till höger: 3 != 2, så vi har omedelbart inkompatibla dimensioner, och därmed inkompatibla former. Om vi försöker köra koden får vi ett felmeddelande:

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älj alla arrayer med kompatibla former:

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 1
some-alt