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 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
Anta att du har två arrayer som du 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 som endast innehåller en rad, vilket gör att dess shape är (1, 3).
Men vad skulle hända om du 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. Tänk på två arrayer med formerna (2, 3) och (3,). Här är 3 = 3, och den saknade vänstra dimensionen betraktas som 1, så formen (3,) blir (1, 3). Eftersom formerna (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 du ä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
Exempel på inkompatibla former, där en aritmetisk operation inte kan utföras eftersom broadcasting inte är möjlig:
Du 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).
Börjar man från den högra dimensionen: 3=2, vilket direkt ger inkompatibla dimensioner, och därmed inkompatibla former. Om du försöker köra koden får du 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