Hyödynnä NumPy:n koko potentiaali edistyneillä taulukkoindeksointitekniikoilla. Opi totuusarvoindeksointi, hieno indeksointi ja viipalointi tehokasta datan valintaa varten.
NumPy-taulukkoindeksointi: Edistyneiden valintatekniikoiden hallinta
NumPy, Pythonin tieteellisen laskennan kulmakivi, tarjoaa tehokkaita työkaluja suurten, moniulotteisten taulukoiden ja matriisien käsittelyyn. Vaikka perusindeksointi ja viipalointi ovat perustavanlaatuisia, NumPy:n todellinen hallitseminen edellyttää perehtymistä sen edistyneempiin valintatekniikoihin. Nämä menetelmät mahdollistavat hienostuneen datan manipuloinnin, jonka avulla käyttäjät voivat poimia tarkasti tarvitsemansa tiedot huomattavan tehokkaasti. Tämä postaus opastaa sinut totuusarvoindeksoinnin ja hienon indeksoinnin kiemuroihin tarjoten käytännön esimerkkejä ja oivalluksia maailmanlaajuiselle yleisölle.
Perustan ymmärtäminen: Perusindeksointi ja viipalointi
Ennen kuin siirrymme edistyneemmälle alueelle, lyhyt kertaus perusindeksoinnista ja viipaloinnista on hyödyllistä. 1D-taulukossa indeksointi on suoraviivaista: arr[i] hakee elementin indeksissä i. Viipalointi käyttää syntaksia arr[start:stop:step] valitakseen elementtijoukon.
2D-taulukoissa indeksointi laajenee rivien ja sarakkeiden valintaan. Esimerkiksi arr[rivi, sarake] käyttää tiettyä elementtiä. Viipalointia voidaan soveltaa itsenäisesti riveihin ja sarakkeisiin: arr[rivi_viipale, sarake_viipale].
Otetaan yksinkertainen 2D-taulukko:
import numpy as np
arr_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Elementin käyttäminen
print(arr_2d[1, 2]) # Tuloste: 6
# Rivien ja sarakkeiden viipalointi
print(arr_2d[0:2, 1:3])
# Tuloste:
# [[2 3]
# [5 6]]
Totuusarvoindeksointi: Datan valitseminen ehtojen perusteella
Totuusarvoindeksoinnin, jota usein kutsutaan ehdolliseksi valinnaksi, avulla voit valita elementtejä taulukosta totuusarvoehdon perusteella. Tämä on uskomattoman tehokas tekniikka datan suodattamiseen. Luot totuusarvotaulukon, jolla on sama muoto kuin alkuperäisellä taulukolla, jossa True ilmaisee, että vastaava elementti tulee valita, ja False ilmaisee poissulkemisen.
Miten se toimii
Prosessiin kuuluu tyypillisesti vertailuoperaation suorittaminen taulukossa. Tämä operaatio palauttaa totuusarvotaulukon. Käytät sitten tätä totuusarvotaulukkoa alkuperäisen taulukon indeksointiin.
Esimerkki 1: Tiettyä arvoa suurempien elementtien valitseminen
Oletetaan, että sinulla on globaalien lämpötilojen datasetti ja haluat tunnistaa kaikki päivät, jolloin lämpötila ylitti tietyn kynnyksen.
# Oletetaan, että kyseessä on 1D-taulukko lämpötiloista eri kaupungeista ympäri maailmaa
lämpötilat = np.array([25.5, 31.2, 18.9, 28.7, 22.1, 35.0, 15.6])
# Asetetaan kynnysarvo
kynnys = 28.0
# Luodaan totuusarvopeite
korkeat_lämpötilat_peite = lämpötilat > kynnys
print(korkeat_lämpötilat_peite)
# Tuloste: [False True False True False True False]
# Käytetään peitettä elementtien valintaan
kuumat_päivät = lämpötilat[korkeat_lämpötilat_peite]
print(kuumat_päivät)
# Tuloste: [31.2 28.7 35. ]
Esimerkki 2: Työskentely 2D-taulukoiden kanssa
Totuusarvoindeksointia voidaan soveltaa myös moniulotteisiin taulukoihin. Kun sitä käytetään 2D-taulukon kanssa, saman muotoinen totuusarvopeite palauttaa 1D-taulukon, joka sisältää kaikki elementit, joille peite on True.
# 2D-taulukko, joka edustaa eri tuotteiden myyntilukuja eri alueilla
myyntidata = np.array([[150, 200, 120],
[300, 180, 250],
[90, 220, 160]])
# Tunnistetaan tietyn tavoitteen ylittävät myyntiluvut
tavoite_myynti = 200
# Luodaan totuusarvopeite
menestyksekäs_myynti_peite = myyntidata >= tavoite_myynti
print(menestyksekäs_myynti_peite)
# Tuloste:
# [[False True False]
# [ True False True]
# [False True False]]
# Valitaan vastaavat myyntiluvut
valittu_myynti = myyntidata[menestyksekäs_myynti_peite]
print(valittu_myynti)
# Tuloste: [200 300 250 220]
Totuusarvoindeksointi useilla ehdoilla
Voit yhdistää useita totuusarvoehtoja loogisten operaattoreiden avulla:
&: Elementtikohtainen looginen AND|: Elementtikohtainen looginen OR~: Elementtikohtainen looginen NOT
Tärkeä huomautus: Ehtoja yhdistettäessä jokainen yksittäinen ehto on suljettava sulkeisiin Pythonin operaattoriprioriteetin vuoksi.
# Valitaan myyntiluvut, jotka ovat välillä 150 ja 250 (mukaan lukien)
ehto_matala = myyntidata >= 150
ehto_korkea = myyntidata <= 250
välillä_150_ja_250 = myyntidata[ehto_matala & ehto_korkea]
print(välillä_150_ja_250)
# Tuloste: [150 200 180 250 220 160]
Hieno indeksointi: Elementtien valitseminen kokonaislukutaulukoiden avulla
Hieno indeksointi on toinen edistynyt valintatekniikka, jonka avulla voit valita elementtejä kokonaislukutaulukoiden avulla. Tämä eroaa viipaloinnista, joka valitsee vierekkäisiä datalohkoja. Hienon indeksoinnin avulla voit poimia mielivaltaisia elementtejä taulukosta niiden indeksien perusteella.
Miten se toimii
Annat indeksitaulukon indeksointioperaattorille. NumPy palauttaa sitten uuden taulukon, jossa elementit on järjestetty annettujen indeksien mukaan.
Esimerkki 1: Tiettyjen elementtien valitseminen 1D-taulukossa
Kuvittele, että sinulla on luettelo käyttäjätunnuksista ja haluat hakea dataa vain tietyille käyttäjille.
# Luettelo näytteistä käyttäjätunnuksista
käyttäjä_tunnukset = np.array([101, 105, 110, 102, 115, 108])
# Indeksit käyttäjille, joista olemme kiinnostuneita
valitut_indeksit = np.array([0, 3, 5]) # Vastaa käyttäjätunnuksia indeksissä 0, 3 ja 5
# Valitaan data näille käyttäjille
valitut_käyttäjät = käyttäjä_tunnukset[valitut_indeksit]
print(valitut_käyttäjät)
# Tuloste: [101 102 108]
Esimerkki 2: Hieno indeksointi 2D-taulukoiden kanssa
Hieno indeksointi on erityisen tehokasta moniulotteisten taulukoiden kanssa. Kun käytät kokonaislukutaulukoita 2D-taulukon indeksointiin, voit valita tiettyjä rivejä, sarakkeita tai jopa yksittäisiä elementtejä ei-vierekkäisellä tavalla.
Hienoa indeksointia voidaan käyttää 2D-taulukoiden kanssa pääasiassa kahdella tavalla:
- Rivien valitseminen: Anna 1D-taulukko rivi-indekseistä.
- Tiettyjen elementtien valitseminen (rivi-, sarake-parit): Anna kaksi 1D-taulukkoa indekseistä – yksi riveille ja yksi sarakkeille. Näiden taulukoiden on oltava saman pituisia, ja rivi-indeksitaulukon i:s elementti ja sarake-indeksitaulukon i:s elementti määrittävät yksilöllisen valittavan elementin.
Tiettyjen rivien valitseminen
Otetaan datasetti osakekursseista eri yrityksille useiden päivien aikana. Haluamme hakea dataa tietyille yrityksille.
# Osakekurssit 3 yritykselle 4 päivän aikana
# Rivit edustavat päiviä, sarakkeet edustavat yrityksiä
osakekurssit = np.array([[100, 150, 200],
[105, 152, 205],
[110, 155, 210],
[115, 160, 215]])
# Indeksit yrityksille, joita haluamme tutkia (esim. yritys indeksissä 0 ja yritys indeksissä 2)
yritys_indeksit = np.array([0, 2])
# Valitaan data näille yrityksille kaikkien päivien ajalta
valitut_yritykset_data = osakekurssit[:, yritys_indeksit]
print(valitut_yritykset_data)
# Tuloste:
# [[100 200]
# [105 205]
# [110 210]
# [115 215]]
: valitsee kaikki rivit ja yritys_indeksit valitsee tietyt sarakkeet. Tulos on uusi 2D-taulukko, jossa jokainen sarake vastaa valittuja yrityksiä.
Tiettyjen elementtien valitseminen rivi- ja sarake-parien avulla
Tässä hieno indeksointi tarjoaa eniten joustavuutta. Voit paikantaa mielivaltaisia elementtejä määrittämällä niiden rivi- ja sarakeindeksit samanaikaisesti.
# Ruudukko, joka edustaa väestötiheyttä eri vyöhykkeillä ja sektoreilla
väestötiheys = np.array([[1000, 1200, 800, 1500],
[900, 1100, 750, 1400],
[1300, 1400, 950, 1600],
[850, 1050, 700, 1350]])
# Haluamme tarkistaa tiheyden tietyissä vyöhyke-sektori-yhdistelmissä.
# Oletetaan, että olemme kiinnostuneita:
# - Vyöhyke 0, sektori 1 (rivi 0, sarake 1)
# - Vyöhyke 2, sektori 0 (rivi 2, sarake 0)
# - Vyöhyke 1, sektori 3 (rivi 1, sarake 3)
# - Vyöhyke 3, sektori 2 (rivi 3, sarake 2)
rivi_indeksit = np.array([0, 2, 1, 3])
sarake_indeksit = np.array([1, 0, 3, 2])
# Valitaan väestötiheydet näissä tietyissä paikoissa
tiettyjen_paikkojen_tiheys = väestötiheys[rivi_indeksit, sarake_indeksit]
print(tiettyjen_paikkojen_tiheys)
# Tuloste: [1200 1300 1400 700]
Keskeinen oivallus: Tulostetaulukon muoto määräytyy indeksitaulukoiden muodon mukaan. Jos molemmat indeksitaulukot ovat 1D ja niillä on sama pituus N, tuloste on 1D-taulukko, jonka pituus on N. Jos jokin indeksitaulukoista on moniulotteinen, tulostetaulukko perii tämän muodon.
Hieno indeksointi ja lähetys
Kun käytät hienoa indeksointia useilla indeksitaulukoilla, joilla on eri muodot, NumPy:n lähetyssäännöt tulevat käyttöön. Jos esimerkiksi indeksoit 2D-taulukon rivien 1D-taulukolla ja sarakkeiden yhdellä kokonaisluvulla, lähetys laajentaa tehokkaasti tämän yksittäisen sarakeindeksin vastaamaan rivien lukumäärää.
# Valitaan kaikki elementit kahdelta ensimmäiseltä riviltä, mutta vain kolmannesta sarakkeesta
indeksit_rivit = np.array([0, 1]) # Rivien indeksit
indeksi_sarake = 2 # Sarakkeen indeksi
valittu_osajoukko = väestötiheys[indeksit_rivit, indeksi_sarake]
print(valittu_osajoukko)
# Tuloste: [800 750]
indeksi_sarake (joka on 2) lähetetään vastaamaan indeksit_rivit-muotoa (joka on (2,)), jolloin luodaan tehokkaasti indeksiparit (0, 2) ja (1, 2).
Totuusarvo- ja hienon indeksoinnin yhdistäminen
Voit myös yhdistää totuusarvoindeksointia ja hienoa indeksointia luodaksesi entistä monimutkaisempia valintakuvioita. Voit esimerkiksi ensin suodattaa rivejä ehdon perusteella ja käyttää sitten hienoa indeksointia valitaksesi tiettyjä sarakkeita näistä suodatetuista riveistä.
Palataan myyntidata-esimerkkiin:
# myyntidata = np.array([[150, 200, 120],
# [300, 180, 250],
# [90, 220, 160]])
# Oletetaan, että haluamme ottaa huomioon vain rivit, joissa vähintään yksi myyntiluku on yli 200
# Luodaan totuusarvopeite riveille
# Tarkistamme, onko jokin elementti rivillä suurempi kuin 200
rivi_peite = np.any(myyntidata > 200, axis=1)
print(rivi_peite)
# Tuloste: [False True True]
# Käytetään tätä rivipeitettä valitsemaan asiaankuuluvat rivit
suodatetut_rivit = myyntidata[rivi_peite]
print(suodatetut_rivit)
# Tuloste:
# [[300 180 250]
# [ 90 220 160]]
# Valitaan nyt näistä suodatetuista riveistä tietyt sarakkeet hienon indeksoinnin avulla.
# Oletetaan, että haluamme ensimmäisen ja kolmannen sarakkeen näistä suodatetuista riveistä.
rivi_indeksit_hienolle = np.array([0, 1]) # Indeksit suodatetut_rivit-taulukossa
sarake_indeksit_hienolle = np.array([0, 2]) # Haluttujen sarakkeiden indeksit
loppukäsittely = suodatetut_rivit[rivi_indeksit_hienolle, sarake_indeksit_hienolle]
print(loppukäsittely)
# Tuloste: [300 160]
Käytännön sovellukset ja globaalit näkökulmat
Nämä edistyneet indeksointitekniikat eivät ole vain teoreettisia rakenteita; ne ovat välttämättömiä työkaluja todellisissa datatieteen sovelluksissa ympäri maailmaa:
- Taloudellinen analyysi: Tiettyjen yritysten osakekurssien valitseminen tiettyinä päivinä tai tiettyjä kannattavuuskynnyksiä täyttäneiden kauppojen tunnistaminen.
- Ilmastotiede: Lämpötila- tai sademäärädatan suodattaminen tietyille maantieteellisille alueille tai ajanjaksoille määriteltyjen kriteerien perusteella. Esimerkiksi kuivuudesta kärsivien alueiden (esim. osat Australiaa, Sahelin alue Afrikassa) tunnistaminen valitsemalla data, joka on alle tietyn sademäärän vertailuarvon.
- Verkkokauppa: Asiakasdatan segmentointi korkea-arvoisten asiakkaiden tai tuotteiden tunnistamiseksi tietyillä myyntimittareilla eri markkinoilla (esim. Eurooppa, Aasia, Pohjois-Amerikka).
- Terveydenhuolto: Potilasdatan analysointi sellaisten henkilöiden tietueiden valitsemiseksi, joilla on tiettyjä sairauksia tai hoitohistoria eri väestöryhmissä.
- Koneoppiminen: Datasetien valmistelu valitsemalla ominaisuuksia tai näytteitä monimutkaisten kriteerien perusteella tai poimimalla mallikertoimia tietyille parametreille.
Kyky valita data tarkasti ja tehokkaasti on ratkaisevan tärkeää tarkkojen mallien rakentamisessa, mielekkäiden oivallusten saamisessa ja tietoon perustuvien päätösten tekemisessä maantieteellisestä sijainnista tai toimialasta riippumatta.
Suorituskyvynäkökohdat
NumPy:n edistynyt indeksointi on erittäin optimoitu. Toiminnot, jotka vaatisivat eksplisiittisiä Python-silmukoita, vektoroi NumPy usein, mikä johtaa merkittäviin suorituskyvyn parannuksiin. On kuitenkin tärkeää olla tietoinen muutamista vivahteista:
- Totuusarvoindeksointi palauttaa yleensä 1D-taulukon valituista elementeistä. Jos sinun on säilytettävä alkuperäinen muoto tietyissä toiminnoissa, sinun on ehkä muotoiltava tai käytettävä muita tekniikoita.
- Hieno indeksointi palauttaa kopion datasta. Jos indeksitaulukot ovat kokonaislukuja, tulos on kopio. Jos indeksitaulukot ovat totuusarvoja, tulos on myös kopio. Tämä tarkoittaa, että palautetun taulukon muutokset eivät vaikuta alkuperäiseen taulukkoon.
- Hyvin suurissa taulukoissa ja monimutkaisissa indeksointijärjestelmissä muistin käyttö voi tulla tekijäksi. NumPy-toiminnot luovat välitaulukoita, jotka kuluttavat muistia.
Kun suorituskyky on kriittinen, erityisesti aikaherkissä sovelluksissa tai kun työskennellään massiivisten datasetien kanssa, koodisi profilointi ja NumPy-toimintojen ymmärtäminen voivat auttaa sinua optimoimaan edelleen. Tähän voi sisältyä totuusarvo- ja hienon indeksoinnin välillä valitseminen tai datasi uudelleenjärjestely.
Parhaat käytännöt edistyneeseen indeksointiin
Hyödynnä NumPy:n edistyneitä indeksointiominaisuuksia tehokkaasti:
- Ymmärrä datasi: Määritä valintakriteerit selkeästi ennen koodin kirjoittamista.
- Käytä mielekkäitä muuttujien nimiä: Nimeä totuusarvopeitteesi ja indeksitaulukkosi kuvaavasti (esim.
korkea_arvo_asiakkaat_peite,kohde_tuote_indeksit). - Aseta luettavuus etusijalle: Vaikka tiivis koodi on hyvä, aseta koodi etusijalle, joka on helppo muiden (ja tulevan itsesi) ymmärtää. Käytä sulkeita asianmukaisesti yhdistetyille totuusarvoehdoille.
- Testaa inkrementaalisesti: Rakenna monimutkaisia indeksointitoimintoja vaihe vaiheelta ja tarkista tulos jokaisessa vaiheessa.
- Hyödynnä NumPy-funktioita: Käytä funktioita, kuten
np.where()ehdolliseen valintaan, joka voi palauttaa indeksejä tai arvoja, tainp.ix_()koko ruudukon luomiseen indeksitaulukoista, mikä voi olla hyödyllistä tietyissä tilanteissa. - Ole tietoinen kopioista vs. näkymistä: Muista, että hieno indeksointi ja totuusarvoindeksointi palauttavat tyypillisesti kopioita, eivät alkuperäisen datan näkymiä.
Johtopäätös
NumPy:n edistyneet taulukkoindeksointitekniikat, nimittäin totuusarvoindeksointi ja hieno indeksointi, ovat perustavanlaatuisia suoritettaessa kehittynyttä datan valintaa ja manipulointia Pythonissa. Ne antavat datatieteilijöille, analyytikoille ja tutkijoille ympäri maailmaa mahdollisuuden poimia tarkasti tarvitsemansa datan, mikä mahdollistaa syvemmät oivallukset ja vankemmat analyysit. Hallitsemalla nämä tekniikat voit hyödyntää NumPy:n koko tehon datalähtöisissä projekteissasi ja edistää edistystä aloilla, jotka vaihtelevat globaalista rahoituksesta ja ilmastotutkimuksesta henkilökohtaiseen lääketieteeseen ja tekoälyyn. Jatka näiden tehokkaiden valintamenetelmien tutkimista, kokeilemista ja integroimista NumPy-työnkulkuusi.