Pythoni massiivide juhend

Pythoni massiivide juhend

Sissejuhatus

Kujutage ette, et teie telefonis on esitusloend oma lemmiklauludest. See esitusloend on loend, kus iga laul on paigutatud kindlasse järjekorda. Saate mängida esimest lugu, hüpata teisele, hüpata viiendale ja nii edasi. See esitusloend sarnaneb arvutiprogrammeerimise massiiviga.

Massiivid on üks põhilisemaid ja laialdasemalt kasutatavaid andmestruktuure.

Sisuliselt on massiiv struktureeritud viis mitme üksuse (nt numbrite, märkide või isegi muude massiivide) salvestamiseks kindlas järjekorras ning saate kiiresti juurde pääseda mis tahes üksusele, seda muuta või eemaldada, kui teate selle asukohta (indeksit).

Selles juhendis anname teile põhjaliku ülevaate massiivi andmestruktuurist. Kõigepealt vaatame, mis on massiivid ja millised on nende peamised omadused. Seejärel siirdume Pythoni maailma, uurides, kuidas massiive reaalses maailmas rakendatakse, manipuleeritakse ja rakendatakse.

Massiivi andmestruktuuri mõistmine

Massiivid on üks vanimaid ja põhilisemaid andmestruktuure, mida arvutiteaduses ja programmeerimises kasutatakse. Nende lihtsus koos teatud toimingute tõhususega muudab need oluliseks teemaks kõigile, kes süvenevad andmete haldamise ja manipuleerimise valdkonda.

Massiiv on üksuste kogum, tavaliselt sama tüüpi, salvestatud külgnevad mälukohad.

See külgnev salvestusruum võimaldab massiividel tagada pideva juurdepääsu mis tahes elemendile, arvestades selle indeksit. Iga massiivi üksust nimetatakse an element, ja elemendi asukoht massiivis määratakse selle järgi indeks, mis tavaliselt algab nullist.

Näiteks kaaluge täisarvude massiivi: [10, 20, 30, 40, 50]. Siin element 20 omab indeksit 1:

pythoni massiivi indekseerimine

Neid on mitu eelised massiivide kasutamine meie andmete salvestamiseks. Näiteks võimaldavad massiivid oma mälu paigutuse tõttu O (1) (konstantne) ajaline keerukus elemendile selle indeksi järgi juurdepääsul. See on eriti kasulik, kui vajame elementidele juhuslikku juurdepääsu. Lisaks salvestatakse massiivid külgnevad mälukohad, mis võib teatud toimingute puhul kaasa tuua parema vahemälu asukoha ja üldise jõudluse paranemise. Massiivide kasutamise teine ​​märkimisväärne eelis on see, et kuna massiividel on pärast deklareerimist fikseeritud suurus, on lihtsam hallata mälu ja vältida ootamatuid ületäitumisi või mälust tühjaks jäämise vigu.

märkused: massiivid on eriti kasulikud stsenaariumide puhul, kus kollektsiooni suurus on ette teada ja jääb muutumatuksvõi kus juhuslik juurdepääs on sagedasem kui sisestamised ja kustutamised.

Teisest küljest on massiividel oma komplekt piirangud. Traditsiooniliste massiivide üks peamisi piiranguid on nende fikseeritud suurus. Kui massiiv on loodud, ei saa selle suurust muuta. See võib põhjustada probleeme, nagu raisatud mälu (kui massiiv on liiga suur) või vajadus suurust muuta (kui massiiv on liiga väike). Peale selle nõuab massiivi keskel oleva elemendi lisamine või kustutamine elementide nihutamist, mis viib O (n) nende toimingute ajaline keerukus.

Selle kõige kokkuvõtteks illustreerime massiivide põhiomadusi, kasutades lugude esitusloendi näidet selle juhendi algusest. Massiiv on andmestruktuur, mis:

  • On indekseeritud: Nii nagu igal teie esitusloendi lool on number (1, 2, 3, …), on igal massiivi elemendil indeks. Kuid enamikus programmeerimiskeeltes algab indeks 0-st. Seega on esimene üksus indeksiga 0, teine ​​​​indeksiga 1 ja nii edasi.

  • On fikseeritud suurus: Kui loote esitusloendi näiteks 10 loo jaoks, ei saa te lisada 11. lugu ilma ühe eemaldamata. Samamoodi on massiividel fikseeritud suurus. Kui olete loonud teatud suurusega massiivi, ei saa te lisada rohkem üksusi kui selle mahutavus.

  • On homogeenne: kõik teie esitusloendis olevad lood on muusikapalad. Samamoodi on kõik massiivi elemendid sama tüüpi. Kui teil on täisarvude massiiv, ei saa te sinna järsku tekstistringi salvestada.

  • Omab otsejuurdepääsu: Kui soovite kuulata esitusloendi 7. lugu, saate otse selle juurde hüpata. Samamoodi pääsete massiivide abil kohe juurde mis tahes elemendile, kui teate selle indeksit.

  • Kõrvalmälu: See on natuke tehnilisem. Kui massiiv luuakse arvuti mällu, võtab see enda alla pideva mäluploki. Mõelge sellele nagu koolis kõrvuti asetsevate kappide rida. Iga kapp on kõrvuti, ilma vahedeta.

Python ja massiivid

Python, mis on tuntud oma paindlikkuse ja kasutuslihtsuse poolest, pakub massiividega töötamiseks mitmeid viise. Kuigi Pythonil ei ole natiivset massiivi andmestruktuuri nagu mõnel teisel keelel, pakub see võimsaid alternatiive, mis võivad toimida sarnaselt ja pakkuda isegi laiendatud võimalusi.

Esmapilgul Pythoni loend võib tunduda massiivi sünonüüm, kuid tuleb arvestada väikeste erinevuste ja nüanssidega:

nimekiri Array
Sisseehitatud Pythoni andmestruktuur Pythonis pole emakeelena – need pärinevad massiivimoodulist
Dünaamiline suurus Fikseeritud (eelmääratletud) suurus
Saab hoida erinevat tüüpi andmeid Hoidke sama tüüpi esemeid
Pakkuge manipuleerimiseks mitmesuguseid sisseehitatud meetodeid Vaja importida väliseid mooduleid
O(1) juurdepääsutoimingute ajaline keerukus O(1) juurdepääsutoimingute ajaline keerukus
Tarbi rohkem mälu Tõhusam mälu

Seda tabelit vaadates tuleb loomulikult küsida: "Millal millist kasutada?". Noh, kui teil on vaja kogu, mis võib dünaamiliselt kasvada või kahaneda ja mahutada segatüüpi andmetüüpe, on Pythoni loend õige tee. Kuid stsenaariumide puhul, mis nõuavad sama tüüpi elementidega mälusäästlikumat kogumist, võiksite kaaluda Pythoni array moodul või välised teegid nagu NumPy.

. massiivi Moodul Pythonis

Kui enamik arendajaid mõtleb Pythonis massiividele, mõtlevad nad sageli vaikimisi loenditele. Kuid Python pakub oma sisseehitatud kaudu spetsiifilisemat massiivistruktuuri array moodul. See moodul pakub Pythonis põhiliste C-stiilis andmetüüpide ruumisäästlikku salvestusruumi.

Kuigi Pythoni loendid on uskumatult mitmekülgsed ja võivad salvestada mis tahes tüüpi objekte, võivad need mõnikord olla üle jõu käivad, eriti kui teil on vaja salvestada ainult põhiandmetüüpide kogum, nagu täisarvud või ujukid. The array moodul võimaldab luua massiive, mis on mälutõhusamad kui konkreetsete andmetüüpide loendid.

Massiivi loomine

Et kasutada array moodul, peate selle esmalt importima:

from array import array

Pärast importimist saate luua massiivi kasutades array() konstruktor:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

Siin, 'i' argument näitab, et massiiv salvestatakse allkirjastatuna täisarvud. Saadaval on mitmeid teisi tüübikoode, nt 'f' ujukite jaoks ja 'd' paarismängu jaoks.

Elementidele juurdepääs ja nende muutmine

Saate massiivi elementidele juurde pääseda ja neid muuta samamoodi nagu loendi puhul:

print(arr[2]) 

Ja nüüd muutkem elementi, muutes selle väärtuseks 6:

arr[2] = 6
print(arr) 

Massiivimeetodid

. array moodul pakub mitmeid viise massiividega manipuleerimiseks:

  • append() – Lisab massiivi lõppu elemendi:

    arr.append(7)
    print(arr) 
  • extend() – Lisab itereeritavad elemendid lõppu:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Eemaldab ja tagastab elemendi antud kohas:

    arr.pop(2)
    print(arr) 
  • remove(): eemaldab määratud väärtuse esimese esinemise:

    arr.remove(2)
    print(arr) 
  • reverse(): Pöörab massiivi järjestuse:

    arr.reverse()
    print(arr) 

Märge: Meetodeid on rohkem, kui siin loetlesime. Vaadake ametlik Pythoni dokumentatsioon kõigi saadaolevate meetodite loendi vaatamiseks array moodul.

Kuigi array moodul pakub mälutõhusamat viisi põhiandmete tüüpide salvestamiseks, see on oluline meeles pidada piirangud. Erinevalt loenditest on massiivid homogeenne. See tähendab, et kõik massiivi elemendid peavad olema sama tüüpi. Lisaks saate ainult ladustada põhilised C-stiilis andmetüübid massiivides. Kui teil on vaja salvestada kohandatud objekte või muid Pythoni tüüpe, peate kasutama loendit või muud andmestruktuuri.

NumPy massiivid

NumPy, lühend sõnadest Numerical Python, on Pythoni numbriliste arvutuste põhipakett. Üks selle peamisi omadusi on võimas N-mõõtmeline massiivi objekt, mis pakub kiireid toiminguid massiividega, sealhulgas matemaatilisi, loogilisi, kujuga manipuleerimist ja palju muud.

NumPy massiivid on mitmekülgsemad kui Pythoni sisseehitatud massiivid array moodul ja on andmeteaduse ja masinõppeprojektide põhiosa.

Miks kasutada NumPy massiive?

Esimene asi, mis pähe tuleb, on jõudlus. NumPy massiivid on rakendatud C-vormingus ja võimaldavad optimeeritud algoritmide ja külgneva mälusalvestuse eeliste tõttu tõhusat mälusalvestust ja kiiremaid toiminguid.

Kui Pythoni sisseehitatud loendid ja massiivid on ühemõõtmelised, siis NumPy massiivid võivad olla mitmemõõtmeline, mistõttu on need ideaalsed maatriksite või tensorite esitamiseks.

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Lõpuks pakub NumPy a suur hulk funktsioone nende massiividega opereerimiseks alates põhiaritmeetikast kuni täiustatud matemaatiliste operatsioonideni, ümberkujundamise, poolitamise ja muuni.

Märge: Kui teate eelnevalt andmete suurust, võib massiividele mälu eeljaotamine (eriti NumPy puhul) kaasa tuua jõudluse paranemise.

NumPy massiivi loomine

NumPy kasutamiseks peate selle esmalt installima (pip install numpy) ja seejärel importige see:

import numpy as np

Pärast importimist saate luua NumPy massiivi, kasutades array() funktsioon:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

Samuti saate luua mitmemõõtmelisi massiive:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

See annab meile:

[[1 2 3] [4 5 6] [7 8 9]]

Peale nende põhiliste massiivide loomise viiside pakub NumPy meile ka muid nutikaid viise massiivide loomiseks. Üks neist on arange() meetod. See loob massiivid korrapäraselt suurenevate väärtustega:

arr = np.arange(10)
print(arr) 

Teine on linspace() meetod, mis loob massiivid kindla arvu elementidega, mis on määratud algus- ja lõppväärtuste vahel võrdsete vahedega:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Elementidele juurdepääs ja nende muutmine

NumPy massiivi elementidele juurdepääs ja nende muutmine on intuitiivne:

print(arr[2]) arr[2] = 6
print(arr) 

Mitmemõõtmeliste massiivide puhul tehakse peaaegu sama:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

Muudab elemendi väärtust teises reas (indeks 1) ja kolmas veerg (indeks 2):

[[1 2 3] [4 5 20] [7 8 9]]

Massiivi kuju muutmine

NumPy pakub massiividega manipuleerimiseks ja nendega töötamiseks palju funktsioone ja meetodeid. Näiteks võite kasutada reshape() meetod muuta massiivi kuju. Oletame, et meil on lihtne massiiv:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

Ja me tahame selle ümber kujundada 3 × 4 maatriksiks. Kõik, mida pead tegema, on kasutada reshape() Argumentidena edastatud soovitud mõõtmetega meetod:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Selle tulemuseks on:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Maatrikskorrutamine

. numpy.dot() jaoks kasutatakse meetodit maatrikskorrutis. See tagastab kahe massiivi punktkorrutise. Ühemõõtmeliste massiivide puhul on see sisemine toode massiividest. Kahemõõtmeliste massiivide puhul on see samaväärne maatrikskorrutis, ja ND jaoks on see a summaarne toode üle esimese massiivi viimase telje ja teise massiivi teisest kuni viimase teljeni.

Vaatame, kuidas see toimib. Esiteks arvutame kahe 1-D massiivi punktkorrutise (vektorite sisemine korrutis):

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Selle tulemuseks on:

Dot product of two 1-D arrays:
32

32 on tegelikult kahe massiivi sisemine korrutis - (14 + 25 + 3*6). Järgmisena saame teha kahe 2-D massiivi maatrikskorrutamise:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Mis annab meile:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

NumPy massiivid on märkimisväärne samm edasi võrreldes Pythoni sisseehitatud loenditega ja array moodul, eriti teaduslike ja matemaatiliste arvutuste jaoks. Nende tõhusus koos NumPy teegi rikkaliku funktsionaalsusega muudab need asendamatuks tööriistaks kõigile, kes soovivad Pythonis arvuoperatsioone teha.

Järeldus

Massiivid, arvutiteaduse ja programmeerimise nurgakivi, on end erinevates rakendustes ja valdkondades ikka ja jälle tõestanud. Pythonis on see põhiline andmestruktuur oma erinevate kehastuste, näiteks loendite kaudu array moodul ja võimsad NumPy massiivid pakuvad arendajatele tõhususe, mitmekülgsuse ja lihtsuse segu.

Kogu selle juhendi jooksul oleme liikunud massiivide põhikontseptsioonidest kuni nende praktiliste rakendusteni Pythonis. Oleme näinud, kuidas massiivid oma mäluga külgneva olemusega pakuvad kiiret juurdepääsuaega ja kuidas Pythoni dünaamilised loendid pakuvad täiendavat paindlikkust. Samuti oleme süvenenud NumPy spetsialiseeritud maailma, kus massiivid muutuvad võimsateks numbriliste arvutuste tööriistadeks.

Ajatempel:

Veel alates Stackabus