Kursinnhold
Ultimate NumPy
Ultimate NumPy
Kringkasting
Før vi dykker inn i matematiske operasjoner i NumPy, er det viktig å forstå et nøkkelkonsept — broadcasting.
Når NumPy arbeider med to matriser, sjekker den formene deres for kompatibilitet for å avgjøre om de kan broadcastes sammen.
Merk
Hvis to matriser allerede har samme form, er broadcasting ikke nødvendig.
Samme Antall Dimensjoner
Anta at vi har to matriser som vi ønsker å utføre addisjon på, med følgende former: (2, 3)
og (1, 3)
. NumPy sammenligner formene til de to matrisene startende fra den høyre dimensjonen og beveger seg mot venstre. Det vil si, den sammenligner først 3 og 3, deretter 2 og 1.
To dimensjoner anses som kompatible hvis de er like eller hvis en av dem er 1:
For dimensjonene 3 og 3, er de kompatible fordi de er like;
For dimensjonene 2 og 1, er de kompatible fordi en av dem er 1.
Siden alle dimensjoner er kompatible, anses formene som kompatible. Derfor kan matrisene kringkastes, noe som resulterer i en standard addisjonsoperasjon mellom matriser av samme form, som utføres 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)
Merk
array_2
er opprettet som en 2D matrise som inneholder kun én rad, derfor er dens form(1, 3)
.
Men hva ville skjedd hvis vi opprettet den som en 1D matrise med formen (3,)
?
Forskjellig Antall Dimensjoner
Når en matrise har færre dimensjoner enn den andre, behandles de manglende dimensjonene som å ha en størrelse på 1. For eksempel, vurder to matriser med formene (2, 3)
og (3,)
. Her er 3 = 3, og den manglende venstre dimensjonen anses å være 1, så formen (3,)
blir (1, 3)
. Siden formene (2, 3)
og (1, 3)
er kompatible, kan disse to matrisene kringkastes.
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)
Broadcasting av skalarer
I tillegg til matematiske operasjoner med matriser, kan vi også utføre lignende operasjoner mellom en matrise og en skalar (tall) takket være broadcasting. I dette tilfellet kan matrisen ha enhver form, da en skalar i hovedsak ikke har noen form, og alle dens dimensjoner anses å være 1. Derfor er formene alltid kompatible.
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)
Uforenlige former
La oss også vurdere et eksempel på uforenlige former, der en aritmetisk operasjon ikke kan utføres fordi broadcasting ikke er mulig:
Vi har en 2x3
matrise og en 1D matrise med lengde 2
, dvs. en form på (2,)
. Den manglende dimensjonen anses å være 1, så formene blir (2, 3)
og (1, 2)
.
Beveger oss fra venstre til høyre: 3 != 2, så vi har umiddelbart inkompatible dimensjoner, og derfor inkompatible former. Hvis vi prøver å kjøre koden, vil vi få en feil:
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)
Takk for tilbakemeldingene dine!