Avage NumPy täielik potentsiaal täiustatud massiivide indekseerimise tehnikatega. Õppige andmete tõhusaks valimiseks loogilist indekseerimist, väljamõeldud indekseerimist ja tükeldamist.
NumPy massiivide indekseerimine: täiustatud valikutehnikate valdamine
NumPy, Pythoni teadusliku andmetöötluse nurgakivi, pakub võimsaid tööriistu suurte mitmemõõtmeliste massiivide ja maatriksite käsitlemiseks. Kuigi põhiindekseerimine ja tükeldamine on fundamentaalsed, hõlmab NumPy tõeline valdamine süvenemist selle täiustatud valikutehnikatesse. Need meetodid võimaldavad keerukat andmetöötlust, võimaldades kasutajatel erakordse tõhususega välja võtta just seda teavet, mida nad vajavad. See postitus juhatab teid läbi loogilise indekseerimise ja väljamõeldud indekseerimise keerukuste, pakkudes praktilisi näiteid ja teadmisi ülemaailmsele publikule.
Sihtasutuse mõistmine: põhiindekseerimine ja tükeldamine
Enne täiustatud territooriumile minekut on kasulik põhiindekseerimise ja tükeldamise lühike kokkuvõte. 1D massiivi puhul on indekseerimine lihtne: arr[i] toob elemendi indeksil i. Tükeldamine kasutab süntaksit arr[start:stop:step] elementide vahemiku valimiseks.
2D massiivide puhul laieneb indekseerimine ridade ja veergude valimisele. Näiteks arr[rida, veerg] pääseb juurde kindlale elemendile. Tükeldamist saab rakendada ridadele ja veergudele sõltumatult: arr[rea_tükk, veeru_tükk].
Võtke arvesse lihtsat 2D massiivi:
import numpy as np
arr_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Elemendile juurdepääs
print(arr_2d[1, 2]) # Väljund: 6
# Ridade ja veergude tĂĽkeldamine
print(arr_2d[0:2, 1:3])
# Väljund:
# [[2 3]
# [5 6]]
Kuigi need meetodid on tõhusad, võivad need muutuda kohmakaks keerukate valikukriteeriumide korral. Siin tulevad esile täiustatud indekseerimistehnikad.
Loogiline indekseerimine: andmete valimine tingimuste alusel
Loogiline indekseerimine, mida sageli nimetatakse tingimuslikuks valikuks, võimaldab teil valida massiivist elemente loogilise tingimuse alusel. See on uskumatult võimas tehnika andmete filtreerimiseks. Loote algse massiiviga sama kujuga loogilise massiivi, kus True näitab, et vastav element tuleks valida, ja False näitab väljajätmist.
Kuidas see töötab
Protsess hõlmab tavaliselt massiivi võrdlusoperatsiooni. See operatsioon tagastab loogilise massiivi. Seejärel kasutate seda loogilist massiivi algse massiivi indekseerimiseks.
Näide 1: väärtusest suuremate elementide valimine
Oletame, et teil on ülemaailmsete temperatuuride andmekogum ja soovite tuvastada kõik päevad, mil temperatuur ületas teatud läve.
# Oletame, et erinevate linnade temperatuuride 1D massiiv on
temperatures = np.array([25.5, 31.2, 18.9, 28.7, 22.1, 35.0, 15.6])
# Määra lävi
threshold = 28.0
# Loo loogiline mask
high_temperatures_mask = temperatures > threshold
print(high_temperatures_mask)
# Väljund: [False True False True False True False]
# Kasutage maski elementide valimiseks
hot_days = temperatures[high_temperatures_mask]
print(hot_days)
# Väljund: [31.2 28.7 35. ]
See valib lühidalt kõik temperatuurid üle 28,0 kraadi. Väljund on uus 1D massiiv, mis sisaldab ainult väärtusi, mis vastavad tingimusele.
Näide 2: töötamine 2D massiividega
Loogilist indekseerimist saab rakendada ka mitmemõõtmelistele massiividele. Kui seda kasutatakse 2D massiiviga, tagastab sama kujuga loogiline mask 1D massiivi, mis sisaldab kõiki elemente, mille mask on True.
# 2D massiiv, mis kujutab mĂĽĂĽginumbreid erinevate toodete jaoks erinevates piirkondades
sales_data = np.array([[150, 200, 120],
[300, 180, 250],
[90, 220, 160]])
# Tuvasta müüginumbrid, mis on üle teatud eesmärgi
target_sales = 200
# Loo loogiline mask
successful_sales_mask = sales_data >= target_sales
print(successful_sales_mask)
# Väljund:
# [[False True False]
# [ True False True]
# [False True False]]
# Vali vastavad mĂĽĂĽginumbrid
selected_sales = sales_data[successful_sales_mask]
print(selected_sales)
# Väljund: [200 300 250 220]
See tagastab 1D massiivi kõigist müüginumbritest, mis vastasid või ületasid eesmärki. See on võimas viis mitmemõõtmeliste andmete filtreerimiseks ilma selgesõnaliste silmusteta.
Loogiline indekseerimine mitme tingimusega
Saate kombineerida mitu loogilist tingimust loogiliste operaatorite abil:
&: element-haaval loogiline JA|: element-haaval loogiline VÕI~: element-haaval loogiline EI
Oluline märkus: tingimuste kombineerimisel tuleb iga üksikut tingimust ümbritseda sulgudega Pythoni operaatori prioriteetsuse tõttu.
# Vali mĂĽĂĽginumbrid, mis on vahemikus 150 kuni 250 (kaasa arvatud)
condition_low = sales_data >= 150
condition_high = sales_data <= 250
between_150_and_250 = sales_data[condition_low & condition_high]
print(between_150_and_250)
# Väljund: [150 200 180 250 220 160]
See näitab, kuidas eraldada andmeid, mis jäävad kindlasse vahemikku, mis on andmeanalüüsis tavaline ülesanne.
Väljamõeldud indekseerimine: elementide valimine täisarvude massiivide abil
Väljamõeldud indekseerimine on veel üks täiustatud valikutehnika, mis võimaldab teil valida elemente täisarvude massiivide abil. See erineb tükeldamisest, mis valib külgnevaid andmeplokke. Väljamõeldud indekseerimine võimaldab teil valida massiivist meelevaldseid elemente nende indeksite põhjal.
Kuidas see töötab
Indekseerimisoperaatorile esitate indeksite massiivi. Seejärel tagastab NumPy uue massiivi, kus elemendid on järjestatud vastavalt esitatud indeksitele.
Näide 1: kindlate elementide valimine 1D massiivis
Kujutage ette, et teil on kasutaja ID-de loend ja soovite tuua andmeid ainult konkreetsete kasutajate jaoks.
# Kasutaja ID-de näidisloend
user_ids = np.array([101, 105, 110, 102, 115, 108])
# Indeksid kasutajatele, kellest me huvitatud oleme
selected_indices = np.array([0, 3, 5]) # Vastab kasutaja ID-dele indeksitel 0, 3 ja 5
# Vali nende kasutajate andmed
selected_users = user_ids[selected_indices]
print(selected_users)
# Väljund: [101 102 108]
See tagastab uue massiivi, mis sisaldab ainult user_ids määratud indeksitel.
Näide 2: väljamõeldud indekseerimine 2D massiividega
Väljamõeldud indekseerimine muutub eriti võimsaks mitmemõõtmeliste massiivide puhul. Kui kasutate 2D massiivi indekseerimiseks täisarvude massiive, saate valida konkreetsed read, veerud või isegi üksikud elemendid mitte-külgneval viisil.
2D massiividega väljamõeldud indekseerimise kasutamiseks on kaks peamist viisi:
- Ridade valimine: esitage ridade indeksite 1D massiiv.
- Konkreetsete elementide valimine (rea, veeru paarid): esitage kaks indeksite 1D massiivi – üks ridade ja teine veergude jaoks. Need massiivid peavad olema sama pikkusega ja rea ​​indeksi massiivi i-s element ja veeru indeksi massiivi i-s element määravad valimiseks ainulaadse elemendi.
Konkreetsete ridade valimine
Vaatleme andmekogumit erinevate ettevõtete aktsiahindade kohta mitme päeva jooksul. Soovime tuua andmed konkreetsete ettevõtete jaoks.
# 3 ettevõtte aktsiahinnad 4 päeva jooksul
# Read tähistavad päevi, veerud tähistavad ettevõtteid
stock_prices = np.array([[100, 150, 200],
[105, 152, 205],
[110, 155, 210],
[115, 160, 215]])
# Indeksid ettevõtetele, mida soovime uurida (nt ettevõte indeksil 0 ja ettevõte indeksil 2)
company_indices = np.array([0, 2])
# Vali nende ettevõtete andmed kõigi päevade kohta
selected_companies_data = stock_prices[:, company_indices]
print(selected_companies_data)
# Väljund:
# [[100 200]
# [105 205]
# [110 210]
# [115 215]]
Siin valib : kõik read ja company_indices valib konkreetsed veerud. Tulemuseks on uus 2D massiiv, kus iga veerg vastab valitud ettevõtetele.
Konkreetsete elementide valimine rea ja veeru paaride abil
Siin pakub väljamõeldud indekseerimine kõige rohkem paindlikkust. Saate täpsustada meelevaldseid elemente, määrates samal ajal nende rea ja veeru indeksid.
# Võrk, mis kujutab rahvastiku tihedust erinevates tsoonides ja sektorites
population_density = np.array([[1000, 1200, 800, 1500],
[900, 1100, 750, 1400],
[1300, 1400, 950, 1600],
[850, 1050, 700, 1350]])
# Soovime kontrollida tihedust konkreetsetes tsooni-sektori kombinatsioonides.
# Oletame, et oleme huvitatud:
# - Tsoon 0, sektor 1 (rida 0, veerg 1)
# - Tsoon 2, sektor 0 (rida 2, veerg 0)
# - Tsoon 1, sektor 3 (rida 1, veerg 3)
# - Tsoon 3, sektor 2 (rida 3, veerg 2)
row_indices = np.array([0, 2, 1, 3])
column_indices = np.array([1, 0, 3, 2])
# Vali rahvastiku tihedused nendes konkreetsetes kohtades
specific_locations_density = population_density[row_indices, column_indices]
print(specific_locations_density)
# Väljund: [1200 1300 1400 700]
Väljund on 1D massiiv, mis sisaldab rahvastiku tihedusi täpselt koordinaatidel, mis on määratud indeksipaaridega.
Peamine arusaam: väljundmassiivi kuju määratakse indeksmassiivide kujuga. Kui mõlemad indeksmassiivid on 1D ja sama pikkusega N, on väljund 1D massiiv pikkusega N. Kui üks indeksmassiividest on mitmemõõtmeline, pärib väljundmassiiv selle kuju.
Väljamõeldud indekseerimine ja edastamine
Kui kasutate väljamõeldud indekseerimist mitme erineva kujuga indeksmassiiviga, hakkavad NumPy edastusreeglid kehtima. Näiteks kui indekseerite 2D massiivi ridade jaoks 1D massiiviga ja veergude jaoks ühe täisarvuga, laiendab edastamine selle ühe veeru indeksi efektiivselt ridade arvuga vastavusse.
# Valime kõik elemendid esimesest kahest reast, kuid ainult kolmandast veerust
indices_rows = np.array([0, 1]) # Ridade indeksid
index_col = 2 # Veeru indeks
selected_subset = population_density[indices_rows, index_col]
print(selected_subset)
# Väljund: [800 750]
Sel juhul edastatakse index_col (mis on 2), et see vastaks indices_rows kujule (mis on (2,)), luues efektiivselt indeksipaarid (0, 2) ja (1, 2).
Loogilise ja väljamõeldud indekseerimise kombineerimine
Saate kombineerida ka loogilist indekseerimist ja väljamõeldud indekseerimist, et luua veelgi keerukamaid valikumustreid. Näiteks võite kõigepealt filtreerida ridu tingimuse alusel ja seejärel kasutada väljamõeldud indekseerimist, et valida neist filtreeritud ridadest konkreetsed veerud.
Vaatame uuesti sales_data näidet:
# sales_data = np.array([[150, 200, 120],
# [300, 180, 250],
# [90, 220, 160]])
# Oletame, et soovime arvesse võtta ainult ridu, kus vähemalt üks müüginumber on üle 200
# Loo ridade jaoks loogiline mask
# Kontrollime, kas mõni rea element on suurem kui 200
row_mask = np.any(sales_data > 200, axis=1)
print(row_mask)
# Väljund: [False True True]
# Rakenda see rea mask asjakohaste ridade valimiseks
filtered_rows = sales_data[row_mask]
print(filtered_rows)
# Väljund:
# [[300 180 250]
# [ 90 220 160]]
# Nüüd kasutame nendest filtreeritud ridadest väljamõeldud indekseerimist konkreetsete veergude valimiseks.
# Oletame, et soovime neist filtreeritud ridadest esimest ja kolmandat veergu.
row_indices_for_fancy = np.array([0, 1]) # Indeksid filtreeritud_ridad massiivis
column_indices_for_fancy = np.array([0, 2]) # Veergude indeksid, mida soovime
final_selection = filtered_rows[row_indices_for_fancy, column_indices_for_fancy]
print(final_selection)
# Väljund: [300 160]
See näide illustreerib stsenaariumi, kus kõigepealt filtreerite oma andmed laiaulatusliku tingimuse alusel (suure müügiga read) ja seejärel eraldatate nendest filtreeritud ridadest selektiivselt konkreetsed andmepunktid.
Praktilised rakendused ja globaalsed vaatenurgad
Need täiustatud indekseerimistehnikad ei ole ainult teoreetilised konstruktsioonid; need on asendamatud tööriistad reaalsetes andmeteaduse rakendustes kogu maailmas:
- Finantsanalüüs: konkreetsete ettevõtete aktsiahindade valimine kindlatel kuupäevadel või teatud kasumiläve ületanud tehingute tuvastamine.
- Kliimateadus: temperatuuri või sademete andmete filtreerimine kindlate geograafiliste piirkondade või ajavahemike jaoks määratletud kriteeriumide alusel. Näiteks põuale kalduvate piirkondade (nt Austraalia osad, Aafrika Saheli piirkond) tuvastamine, valides andmed alla teatud sademete taseme.
- E-kaubandus: kliendiandmete segmenteerimine, et tuvastada suure väärtusega kliente või konkreetsete müüginäitajatega tooteid erinevatel turgudel (nt Euroopa, Aasia, Põhja-Ameerika).
- Tervishoid: patsientide andmete analüüsimine, et valida kindlate seisundite või ravi ajalooga isikute andmeid erinevates populatsioonides.
- Masinõpe: andmekogumite ettevalmistamine funktsioonide või näidiste valimisel keerukate kriteeriumide alusel või mudeli koefitsientide eraldamine konkreetsete parameetrite jaoks.
Võime andmeid täpselt ja tõhusalt valida on ülioluline täpsete mudelite loomiseks, sisukate arusaamade tuletamiseks ja teadlike otsuste tegemiseks, olenemata geograafilisest asukohast või tööstusharust.
Toimivuskaalutlused
NumPy täiustatud indekseerimine on kõrgelt optimeeritud. Toimingud, mis nõuaksid selgesõnalisi Pythoni silmuseid, vektoriseeritakse sageli NumPy poolt, mis toob kaasa olulise jõudluse suurenemise. Siiski on oluline olla teadlik mõnest nüansist:
- Loogiline indekseerimine tagastab tavaliselt valitud elementide 1D massiivi. Kui teil on vaja teatud toimingute jaoks säilitada algne kuju, peate võib-olla ümber kujundama või kasutama muid tehnikaid.
- Väljamõeldud indekseerimine tagastab andmete koopia. Kui indeksmassiivid on täisarvud, on tulemus koopia. Kui indeksmassiivid on loogilised, on tulemus ka koopia. See tähendab, et tagastatud massiivi muudatused ei mõjuta algset massiivi.
- Väga suurte massiivide ja keerukate indekseerimisskeemide puhul võib mälu kasutamine muutuda teguriks. NumPy toimingud loovad vahepealseid massiive, mis kulutavad mälu.
Kui jõudlus on kriitiline, eriti ajatundlikes rakendustes või massiivsete andmekogumitega töötamisel, võib koodi profileerimine ja NumPy aluseks olevate toimingute mõistmine aidata teil veelgi optimeerida. See võib hõlmata valikut loogilise ja väljamõeldud indekseerimise vahel või andmete ümberstruktureerimist.
Parimad praktikad täiustatud indekseerimiseks
NumPy täiustatud indekseerimisvõimaluste tõhusaks kasutamiseks:
- Mõistke oma andmeid: enne koodi kirjutamist määratlege selgelt valikukriteeriumid.
- Kasutage sisukaid muutujanimesid: nimetage oma loogilised maskid ja indeksmassiivid kirjeldavalt (nt
high_value_customers_mask,target_product_indices). - Eelistage loetavust: kuigi lühike kood on hea, eelistage koodi, mida on teistel (ja teie tulevasel minul) lihtne mõista. Kasutage kombineeritud loogiliste tingimuste jaoks sobivalt sulgusid.
- Testige järk-järgult: looge keerukaid indekseerimistoiminguid samm-sammult, kontrollides väljundit igas etapis.
- Kasutage NumPy funktsioone: kasutage selliseid funktsioone nagu
np.where()tingimuslikuks valikuks, mis võib tagastada indekseid või väärtusi, võinp.ix_()indeksmassiividest täieliku ruudustiku loomiseks, mis võib olla kasulik konkreetsetes stsenaariumides. - Olge teadlik koopiate ja vaadete vahel: pidage meeles, et väljamõeldud indekseerimine ja loogiline indekseerimine tagastavad tavaliselt koopiad, mitte algsete andmete vaated.
Järeldus
NumPy täiustatud massiivide indekseerimise tehnikad, nimelt loogiline indekseerimine ja väljamõeldud indekseerimine, on fundamentaalsed keerukate andmete valiku ja manipuleerimise tegemiseks Pythonis. Need võimaldavad andmeteadlastel, analüütikutel ja teadlastel üle kogu maailma eraldada täpselt vajalikud andmed, võimaldades sügavamaid teadmisi ja jõulisemaid analüüse. Neid tehnikaid valdades saate avada NumPy täieliku võimsuse oma andmepõhistes projektides, aidates kaasa edusammudele valdkondades, alates ülemaailmsest rahandusest ja kliimauuringutest kuni personaalse meditsiini ja tehisintellektini. Jätkake nende võimsate valikumeetodite uurimist, katsetamist ja integreerimist oma NumPy töövoogu.