Vodnik po nizih v Pythonu

Vodnik po nizih v Pythonu

Predstavitev

Predstavljajte si, da imate v telefonu seznam predvajanja svojih najljubših pesmi. Ta seznam predvajanja je seznam, kjer je vsaka pesem postavljena v določenem vrstnem redu. Predvajate lahko prvo skladbo, preskočite na drugo, skočite na peto in tako naprej. Ta seznam predvajanja je zelo podoben nizu v računalniškem programiranju.

Nizi so ena najbolj temeljnih in pogosto uporabljenih podatkovnih struktur.

V bistvu je matrika strukturiran način za shranjevanje več elementov (kot so številke, znaki ali celo drugi nizi) v določenem vrstnem redu in lahko hitro dostopate do katerega koli elementa, ga spremenite ali odstranite, če poznate njegov položaj (indeks).

V tem priročniku vam bomo dali obsežen pregled podatkovne strukture polja. Najprej si bomo pogledali, kaj so polja in katere so njihove glavne značilnosti. Nato se bomo podali v svet Pythona in raziskali, kako se nizi izvajajo, manipulirajo in uporabljajo v scenarijih resničnega sveta.

Razumevanje podatkovne strukture polja

Nizi so med najstarejšimi in najbolj temeljnimi podatkovnimi strukturami, ki se uporabljajo v računalništvu in programiranju. Zaradi njihove preprostosti, skupaj z njihovo učinkovitostjo pri določenih operacijah, so glavna tema za vsakogar, ki se poglobi v področje upravljanja in manipulacije podatkov.

Niz je zbirka elementov, običajno od iste vrste, shranjeno v sosednje pomnilniške lokacije.

Ta neprekinjena shramba omogoča nizom, da zagotovijo stalni dostop do katerega koli elementa glede na njegov indeks. Vsak element v matriki se imenuje an element, položaj elementa v matriki pa je določen z njegovim Indeks, ki običajno začne se od nič.

Na primer, razmislite o nizu celih števil: [10, 20, 30, 40, 50]. Tukaj, element 20 ima indeks 1:

indeksiranje matrike python

Obstaja več Prednosti uporabe nizov za shranjevanje naših podatkov. Na primer, nizi zaradi njihove postavitve pomnilnika omogočajo O (1) (konstantna) časovna kompleksnost pri dostopu do elementa po njegovem indeksu. To je še posebej koristno, ko potrebujemo naključen dostop do elementov. Poleg tega so polja shranjena v sosednje pomnilniške lokacije, kar lahko vodi do boljše lokalnosti predpomnilnika in splošnih izboljšav zmogljivosti pri določenih operacijah. Druga pomembna prednost uporabe nizov je, da je, ker imajo nizi fiksno velikost, ko so enkrat deklarirani, lažje upravljati pomnilnik in se izogniti nepričakovanim prelivom ali napakam zaradi pomanjkanja pomnilnika.

Opombe: nizi so še posebej uporabni v scenarijih, kjer je velikost zbirke je znana vnaprej in ostaja nespremenjena, ali kjer je naključni dostop pogostejši kot vstavljanje in brisanje.

Po drugi strani imajo nizi svoj niz omejitve. Ena glavnih omejitev tradicionalnih nizov je njihova fiksna velikost. Ko je polje ustvarjeno, njegove velikosti ni mogoče spremeniti. To lahko povzroči težave, kot je izguba pomnilnika (če je polje preveliko) ali potreba po spreminjanju velikosti (če je polje premajhno). Poleg tega vstavljanje ali brisanje elementa na sredini matrike zahteva premikanje elementov, kar vodi do O (n) časovna zapletenost teh operacij.

Če povzamemo vse to, ponazorimo glavne značilnosti nizov s primerom seznama predvajanja pesmi z začetka tega vodnika. Niz je podatkovna struktura, ki:

  • Je indeksirano: Tako kot ima vsaka skladba na seznamu predvajanja številko (1, 2, 3, …), ima vsak element v matriki indeks. Toda v večini programskih jezikov se indeks začne pri 0. Torej je prvi element pri indeksu 0, drugi pri indeksu 1 in tako naprej.

  • Ima fiksno velikost: Ko ustvarite seznam predvajanja za na primer 10 pesmi, ne morete dodati 11. skladbe, ne da bi jo prej odstranili. Podobno imajo nizi fiksno velikost. Ko ustvarite matriko določene velikosti, ne morete dodati več elementov, kot je njena zmogljivost.

  • Je homogena: Vse pesmi na vašem seznamu predvajanja so skladbe. Podobno so vsi elementi v matriki iste vrste. Če imate niz celih števil, vanj ne morete nenadoma shraniti besedilnega niza.

  • Ima neposreden dostop: Če želite poslušati 7. skladbo na seznamu predvajanja, lahko skočite neposredno nanjo. Podobno lahko z nizi takoj dostopate do katerega koli elementa, če poznate njegov indeks.

  • Neprekinjeni pomnilnik: To je malo bolj tehnično. Ko je niz ustvarjen v pomnilniku računalnika, zasede neprekinjen blok pomnilnika. Zamislite si to kot vrsto sosednjih omaric v šoli. Vsaka omarica je poleg druge, brez vrzeli vmes.

Python in polja

Python, znan po svoji prilagodljivosti in enostavni uporabi, ponuja več načinov za delo z nizi. Medtem ko Python nima izvorne podatkovne strukture nizov kot nekateri drugi jeziki, ponuja zmogljive alternative, ki lahko delujejo podobno in celo nudijo razširjene zmogljivosti.

Na prvi pogled, Pythonov seznam se morda zdi sinonim za matriko, vendar je treba upoštevati subtilne razlike in nianse:

Seznam Array
Vgrajena podatkovna struktura Python Niso izvirni v Pythonu – prihajajo iz modula `array`
Dinamična velikost Fiksna (prednastavljena) velikost
Lahko vsebuje elemente različnih vrst podatkov Držite predmete iste vrste
Zagotovite vrsto vgrajenih metod za manipulacijo Potreben je uvoz zunanjih modulov
O(1) časovna kompleksnost za operacije dostopa O(1) časovna kompleksnost za operacije dostopa
Porabite več pomnilnika Učinkovitejši pomnilnik

Ob pogledu na to tabelo se je samoumevno vprašati – "Kdaj uporabiti katero?". No, če potrebujete zbirko, ki se lahko dinamično povečuje ali krči in lahko vsebuje mešane vrste podatkov, je Pythonov seznam prava pot. Vendar pa lahko za scenarije, ki zahtevajo pomnilniško učinkovitejšo zbirko z elementi iste vrste, razmislite o uporabi Pythonovega array modul ali zunanje knjižnice, kot je NumPy.

O matrika Modul v Pythonu

Ko večina razvijalcev razmišlja o nizih v Pythonu, pogosto privzeto razmišljajo o seznamih. Vendar Python ponuja bolj specializirano matrično strukturo prek svoje vgrajene array modul. Ta modul zagotavlja prostorsko učinkovito shranjevanje osnovnih tipov podatkov v slogu C v Pythonu.

Medtem ko so seznami Python neverjetno vsestranski in lahko shranijo katero koli vrsto predmeta, so včasih lahko pretirani, še posebej, če morate shraniti samo zbirko osnovnih podatkovnih tipov, kot so cela števila ali lebdeči. The array modul ponuja način za ustvarjanje nizov, ki so pomnilniško učinkovitejši od seznamov za določene tipe podatkov.

Ustvarjanje matrike

Za uporabo array modul, ga morate najprej uvoziti:

from array import array

Po uvozu lahko ustvarite matriko z uporabo array() konstruktor:

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

Tukaj je 'i' argument označuje, da bo matrika shranila predpisano cela števila. Na voljo je več drugih tipskih kod, kot npr 'f' za plovce in 'd' za dvojice.

Dostopanje in spreminjanje elementov

Do elementov v matriki lahko dostopate in jih spreminjate, tako kot bi to storili s seznamom:

print(arr[2]) 

Zdaj pa spremenimo element tako, da mu spremenimo vrednost v 6:

arr[2] = 6
print(arr) 

Metode matrike

O array modul ponuja več metod za manipulacijo nizov:

  • append() – Doda element na konec matrike:

    arr.append(7)
    print(arr) 
  • extend() – Doda ponovljive elemente na konec:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Odstrani in vrne element na dano mesto:

    arr.pop(2)
    print(arr) 
  • remove(): Odstrani prvo pojavitev navedene vrednosti:

    arr.remove(2)
    print(arr) 
  • reverse(): Obrne vrstni red matrike:

    arr.reverse()
    print(arr) 

Opomba: Obstaja več metod, kot smo jih tukaj našteli. Glejte na uradna dokumentacija Python da si ogledate seznam vseh razpoložljivih metod v array modul.

Medtem ko je array modul ponuja pomnilniško učinkovitejši način za shranjevanje osnovnih tipov podatkov, zato si ga je nujno zapomniti omejitve. Za razliko od seznamov so nizi homogeno. To pomeni, da morajo biti vsi elementi v matriki iste vrste. Prav tako lahko samo shranite osnovni podatkovni tipi v slogu C v nizih. Če morate shraniti predmete po meri ali druge vrste Python, boste morali uporabiti seznam ali drugo podatkovno strukturo.

Nizi NumPy

NumPy, okrajšava za Numerical Python, je temeljni paket za numerične izračune v Pythonu. Ena njegovih glavnih lastnosti je njegova moč N-dimenzionalni matrični objekt, ki ponuja hitre operacije na nizih, vključno z matematičnimi, logičnimi, manipulacijo oblik in več.

Nizi NumPy so bolj vsestranski kot vgrajeni v Python array modul in so stalnica v projektih podatkovne znanosti in strojnega učenja.

Zakaj uporabljati polja NumPy?

Prva stvar, ki pride na misel, je performance. Nizi NumPy so implementirani v C in omogočajo učinkovito shranjevanje v pomnilniku in hitrejše operacije zaradi optimiziranih algoritmov in prednosti neprekinjenega shranjevanja v pomnilniku.

Medtem ko so Pythonovi vgrajeni seznami in polja enodimenzionalni, so polja NumPy lahko večdimenzionalen, zaradi česar so idealni za predstavljanje matrik ali tenzorjev.

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

Končno NumPy ponuja a široko paleto funkcij za delovanje s temi nizi, od osnovne aritmetike do naprednih matematičnih operacij, preoblikovanja, cepljenja in še več.

Opomba: Če vnaprej poznate velikost podatkov, lahko predhodna dodelitev pomnilnika za polja (zlasti v NumPy) vodi do izboljšav zmogljivosti.

Ustvarjanje matrike NumPy

Če želite uporabljati NumPy, ga morate najprej namestiti (pip install numpy) in ga nato uvozite:

import numpy as np

Po uvozu lahko ustvarite matriko NumPy z uporabo array() funkcija:

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

Ustvarite lahko tudi večdimenzionalne nize:

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

To nam bo dalo:

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

Poleg teh osnovnih načinov, kako lahko ustvarimo nize, nam NumPy ponuja druge pametne načine, kako lahko ustvarimo nize. Ena izmed njih je arange() metoda. Ustvari nize z redno naraščajočimi vrednostmi:

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

Še ena je linspace() metoda, ki ustvari nize z določenim številom elementov, ki so enakomerno razporejeni med podanimi začetnimi in končnimi vrednostmi:

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

Dostopanje in spreminjanje elementov

Dostopanje in spreminjanje elementov v matriki NumPy je intuitivno:

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

Podobno naredimo za večdimenzionalne nize:

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

Spremenil bo vrednost elementa v drugi vrstici (indeks 1) in tretji stolpec (indeks 2):

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

Spreminjanje oblike matrike

NumPy ponuja številne funkcije in metode za manipulacijo in delovanje nizov. Na primer, lahko uporabite reshape() metoda za spremenite obliko niza. Recimo, da imamo preprosto matriko:

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

In želimo ga preoblikovati v matriko 3×4. Vse kar morate storiti je, da uporabite reshape() metoda z želenimi dimenzijami, posredovanimi kot argumenti:


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

Posledica tega bo:

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

Množenje matrik

O numpy.dot() metoda se uporablja za množenje matrik. Vrne pikčasti produkt dveh nizov. Za enodimenzionalne nize je to notranji izdelek nizov. Za 2-dimenzionalne nize je enakovreden množenje matrik, za ND pa je a vsota produkta nad zadnjo osjo prvega niza in predzadnjo os drugega niza.

Poglejmo, kako deluje. Najprej izračunajmo pikčasti produkt dveh 1-D nizov (notranji produkt vektorjev):

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) 

Posledica tega bo:

Dot product of two 1-D arrays:
32

32 je pravzaprav notranji produkt obeh nizov – (14 + 25 + 3*6). Nato lahko izvedemo matrično množenje dveh 2-D nizov:


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) 

Kar nam bo dalo:

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

Nizi NumPy so pomemben korak naprej od vgrajenih seznamov Python in array modul, zlasti za znanstvene in matematične izračune. Zaradi njihove učinkovitosti v kombinaciji z bogato funkcionalnostjo, ki jo ponuja knjižnica NumPy, so nepogrešljivo orodje za vsakogar, ki želi izvajati numerične operacije v Pythonu.

zaključek

Nizi, temelj računalništva in programiranja, so vedno znova dokazali svojo vrednost v različnih aplikacijah in domenah. V Pythonu ta osnovna podatkovna struktura prek svojih različnih inkarnacij, kot so seznami, array modul in zmogljiva polja NumPy razvijalcem ponujajo mešanico učinkovitosti, vsestranskosti in preprostosti.

Skozi ta vodnik smo potovali od temeljnih konceptov matrik do njihove praktične uporabe v Pythonu. Videli smo, kako nizi s svojo pomnilniško zvezno naravo zagotavljajo hitre dostopne čase in kako Pythonovi dinamični seznami prinašajo dodatno raven prilagodljivosti. Poglobili smo se tudi v specializirani svet NumPy, kjer se nizi spremenijo v zmogljiva orodja za numerično računanje.

Časovni žig:

Več od Stackabuse