Kursinnehåll
Ultimata NumPy
Ultimata NumPy
Sändning
Innan vi dyker in i matematiska operationer i NumPy är det viktigt att förstå ett nyckelbegrepp — broadcasting.
När NumPy arbetar med två arrayer kontrollerar den deras former för kompatibilitet för att avgöra om de kan broadcastas tillsammans.
Notera
Om två arrayer redan har samma form, behövs ingen broadcasting.
Samma antal dimensioner
Anta 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 till 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 addition mellan matriser av samma form, vilket utförs elementvis.
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)
Notera
array_2
skapas som en 2D array som endast innehåller en rad, vilket är anledningen till att dess form är(1, 3)
.
Men vad skulle hända om vi skapade den som en 1D array med formen (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 formerna (2, 3)
och (3,)
. Här är 3 = 3, och den saknade vänstra dimensionen anses vara 1, så formen (3,)
blir (1, 3)
. Eftersom formerna (2, 3)
och (1, 3)
är kompatibla, kan dessa två arrayer sändas ut.
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)
Sändning av Skalärer
Förutom matematiska operationer med arrayer, kan vi också utföra liknande operationer mellan en array och en skalär (nummer) tack vare sändning. I detta fall kan arrayen ha vilken form som helst, eftersom en skalär i princip inte har någon form, och alla dess dimensioner anses vara 1. Därför är formerna alltid kompatibla.
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)
Oförenliga former
Låt oss också överväga ett exempel på oförenliga former, där en aritmetisk operation inte kan utföras eftersom broadcasting inte är möjlig:
Vi har en 2x3
array och en 1D-array med längden 2
, dvs. en form av (2,)
. Den saknade dimensionen anses vara 1, så formerna blir (2, 3)
och (1, 2)
.
Rör sig från vänster till höger: 3 != 2, så vi har omedelbart inkompatibla dimensioner, och därför inkompatibla former. Om vi försöker köra koden kommer vi att få ett fel:
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)
Tack för dina kommentarer!