Sändning
Innan du fördjupar dig i matematiska operationer i NumPy är det viktigt att förstå ett nyckelbegrepp – broadcasting.
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.
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.
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 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.
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 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.
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)
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:
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)
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Sä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.
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.
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.
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 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.
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 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.
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)
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:
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)
Tack för dina kommentarer!