Broadcasting ja vektoroidut operaatiot
Miten broadcasting toimii, alkiokohtaiset operaatiot ja silmukoiden välttäminen vektoroinnilla.
Broadcasting ja vektoroidut operaatiot on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Miksi vektoroida?
NumPy käsittelee kokonaisia taulukoita C:n nopeudella. Python-silmukoiden korvaaminen taulukkolausekkeilla, eli vektorointi, on usein 10–100 kertaa nopeampaa.
Elementtikohtaiset operaatiot
Aritmeettiset operaattorit kohdistuvat alkioihin yksi kerrallaan, kun taulukoiden muodot täsmäävät. Erillistä silmukkaa ei tarvita.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])
print(a + b) # [11 22 33]
print(a * b) # [10 40 90]Skalaarin broadcasting
Taulukon ja skalaarin välinen operaatio kohdistaa skalaarin jokaiseen alkioon. Skalaari siis "broadcastataan" koko taulukon yli.
a = np.array([1, 2, 3, 4])
print(a * 10) # [10 20 30 40]
print(a + 100) # [101 102 103 104]Mitä broadcasting tarkoittaa?
Broadcasting antaa NumPyn yhdistää erimuotoisia taulukoita venyttämällä pienempää näennäisesti ilman muistin kopiointia.
Broadcasting-sääntö
Muotoja verrataan viimeisestä eli oikeanpuolimmaisesta ulottuvuudesta alkaen. Kaksi ulottuvuutta ovat yhteensopivia, kun ne ovat yhtä suuria tai toinen niistä on 1. Kokoa 1 oleva ulottuvuus venytetään vastaamaan toista.
# (3, 4) with (4,) -> compatible (trailing 4 matches)
# (3, 4) with (3, 1) -> compatible (1 stretches to 4)
# (3, 4) with (3,) -> ERROR (trailing 4 vs 3)Rivivektorin broadcasting
Sarakkeiden lukumäärän pituinen 1D-taulukko lisätään jokaiselle riville.
m = np.array([[1, 2, 3], [4, 5, 6]])
row = np.array([10, 20, 30])
print(m + row)
# [[11 22 33]
# [14 25 36]]Sarakevektorin broadcasting
Muotoilkaa vektori sarakkeeksi (muoto (n,1)), jotta se broadcastautuu sarakkeiden yli rivien sijaan.
col = np.array([[100], [200]]) # shape (2, 1)
print(m + col)
# [[101 102 103]
# [204 205 206]]Tietojen keskittäminen (käytännön esimerkki)
Jokaisen sarakkeen oman keskiarvon vähentäminen keskittää kunkin piirteen. Tämä on yleinen esikäsittelyvaihe, joka tehdään yhdellä broadcasting-rivillä.
data = np.array([[1.0, 10.0], [2.0, 20.0], [3.0, 30.0]])
centered = data - data.mean(axis=0)
print(centered)
# columns now have mean 0Yleiskäyttöiset funktiot (ufuncit)
NumPy sisältää nopeita elementtikohtaisia matemaattisia funktioita, joita kutsutaan ufunceiksi: np.sqrt, np.log, np.exp ja monia muita. Ne ovat vektoroituja ja huomioivat broadcastingin.
a = np.array([1.0, 4.0, 9.0, 16.0])
print(np.sqrt(a)) # [1. 2. 3. 4.]
print(np.log(a)) # natural log of each element
print(np.exp([0, 1])) # [1. 2.71828183]Silmukan ja vektoroinnin nopeus
Sama laskutoimitus on vektoroituna huomattavasti nopeampi. Käyttäkää %timeit-komentoa huomataksenne eron miljoonan alkion taulukolla.
big = np.arange(1000000, dtype=float)
# Slow Python loop:
# %timeit [x*x for x in big]
# Fast vectorized:
%timeit big * big # typically tens of times fasterVektoroinnin yhdistäminen
Ketjuttakaa ufunc-funktioita ja aritmeettisia operaatioita, jotta voitte ilmaista kaavat suoraan. Tässä lasketaan Gaussin käyrä ilman silmukoita.
x = np.linspace(-3, 3, 7)
y = np.exp(-x**2 / 2)
print(np.round(y, 3))Pikakoe
Testatkaa broadcastingin ymmärtämistänne.
Kertaus
Vektoroinnin perusteet:
- Elementtikohtaiset operaatiot välttävät Python-silmukat ja suoritetaan C:n nopeudella
- Broadcasting sovittaa yhteen oikeanpuolimmaiset ulottuvuudet; kokojen on täsmättävä tai oltava 1
- Käyttäkää sarakevektoreita (n,1), kun haluatte broadcastata sarakkeiden suuntaan
- ufuncit:
np.sqrt,np.log,np.exp - Keskittäkää tiedot muodolla
data - data.mean(axis=0)
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 225
Usein kysytyt kysymykset
Onko oppitunti ”Broadcasting ja vektoroidut operaatiot” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Broadcasting ja vektoroidut operaatiot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Broadcasting ja vektoroidut operaatiot”?
Miten broadcasting toimii, alkiokohtaiset operaatiot ja silmukoiden välttäminen vektoroinnilla. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Broadcasting ja vektoroidut operaatiot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?
Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Taulukoiden luominen ja ominaisuudet
- Indeksointi, viipalointi ja fancy-indeksointi
- Broadcasting ja vektoroidut operaatiot
- Lineaarialgebra NumPyllä