Broadcasting
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 formaten på arrayer för att utföra aritmetiska operationer utan att manuellt ändra deras form. I grunden justerar broadcasting automatiskt arrayernas former.
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 vara 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 storleken 1. Till exempel, överväg två arrayer med shape (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 betraktas som 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 titta på 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
Awesome!
Completion rate improved to 3.7
Broadcasting
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 formaten på arrayer för att utföra aritmetiska operationer utan att manuellt ändra deras form. I grunden justerar broadcasting automatiskt arrayernas former.
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 vara 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 storleken 1. Till exempel, överväg två arrayer med shape (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 betraktas som 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 titta på 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!