Kurssisisältö
Lopullinen NumPy
Lopullinen NumPy
Lähetys
Ennen kuin sukellamme NumPyn matemaattisiin operaatioihin, on tärkeää ymmärtää keskeinen käsite — broadcasting.
Kun NumPy käsittelee kahta taulukkoa, se tarkistaa niiden muodot yhteensopivuuden varmistamiseksi, jotta voidaan määrittää, voidaanko ne lähettää yhdessä.
Huomautus
Jos kahdella taulukolla on jo sama muoto, broadcastingia ei tarvita.
Sama määrä ulottuvuuksia
Oletetaan, että meillä on kaksi taulukkoa, joille haluamme suorittaa yhteenlaskun, seuraavilla muodoilla: (2, 3)
ja (1, 3)
. NumPy vertaa kahden taulukon muotoja aloittaen oikeanpuoleisimmasta ulottuvuudesta ja siirtyen vasemmalle. Eli se vertaa ensin 3 ja 3, sitten 2 ja 1.
Kaksi ulottuvuutta katsotaan yhteensopiviksi, jos ne ovat yhtä suuret tai jos toinen niistä on 1:
Ulottuvuuksille 3 ja 3, ne ovat yhteensopivia, koska ne ovat yhtä suuret;
Ulottuvuuksille 2 ja 1, ne ovat yhteensopivia, koska toinen niistä on 1.
Koska kaikki ulottuvuudet ovat yhteensopivia, muodot katsotaan yhteensopiviksi. Siksi taulukot voidaan lähettää, mikä johtaa vakio yhteenlaskuoperaatioon saman muotoisten matriisien välillä, joka suoritetaan alkioittain.
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)
Huom
array_2
luodaan 2D-taulukkona, joka sisältää vain yhden rivin, minkä vuoksi sen muoto on(1, 3)
.
Mutta mitä tapahtuisi, jos loisimme sen 1D-taulukkona, jonka muoto on (3,)
?
Eri määrä ulottuvuuksia
Kun yhdellä taulukolla on vähemmän ulottuvuuksia kuin toisella, puuttuvat ulottuvuudet käsitellään kooltaan 1. Esimerkiksi, harkitse kahta taulukkoa, joiden muodot ovat (2, 3)
ja (3,)
. Tässä 3 = 3, ja puuttuva vasen ulottuvuus katsotaan olevan 1, joten muoto (3,)
muuttuu muotoon (1, 3)
. Koska muodot (2, 3)
ja (1, 3)
ovat yhteensopivia, näitä kahta taulukkoa voidaan lähettää.
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)
Skalaariarvojen lähetys
Matemaattisten operaatioiden lisäksi taulukoiden kanssa voimme suorittaa vastaavia operaatioita myös taulukon ja skalaariarvon (numeron) välillä lähetyksen ansiosta. Tässä tapauksessa taulukolla voi olla mikä tahansa muoto, sillä skalaariarvolla ei ole varsinaista muotoa, ja kaikki sen ulottuvuudet katsotaan olevan 1. Siksi muodot ovat aina yhteensopivia.
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)
Yhteensopimattomat muodot
Tarkastellaan myös esimerkkiä yhteensopimattomista muodoista, joissa aritmeettista operaatiota ei voida suorittaa, koska lähetys ei ole mahdollista:
Meillä on 2x3
taulukko ja 1D-taulukko, jonka pituus on 2
, eli muoto on (2,)
. Puuttuva ulottuvuus katsotaan olevan 1, joten muodot ovat (2, 3)
ja (1, 2)
.
Siirryttäessä vasemmalta oikealle: 3 != 2, joten meillä on heti yhteensopimattomat ulottuvuudet, ja siksi yhteensopimattomat muodot. Jos yritämme suorittaa koodin, saamme virheen:
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)
Kiitos palautteestasi!