Veiledning til matriser i Python

Veiledning til matriser i Python

Introduksjon

Tenk deg at du har en spilleliste med favorittsangene dine på telefonen. Denne spillelisten er en liste der hver sang er plassert i en bestemt rekkefølge. Du kan spille den første sangen, hoppe til den andre, hoppe til den femte, og så videre. Denne spillelisten ligner mye på en rekke i dataprogrammering.

Arrays står som en av de mest grunnleggende og mest brukte datastrukturene.

I hovedsak er en matrise en strukturert måte å lagre flere elementer (som tall, tegn eller til og med andre matriser) i en bestemt rekkefølge, og du kan raskt få tilgang til, endre eller fjerne et hvilket som helst element hvis du vet dets posisjon (indeks).

I denne veiledningen gir vi deg en omfattende oversikt over array-datastrukturen. Først av alt skal vi ta en titt på hva matriser er og hva som er hovedkarakteristikkene deres. Vi vil deretter gå over til Python-verdenen, og utforske hvordan arrays implementeres, manipuleres og brukes i virkelige scenarier.

Forstå array-datastrukturen

Arrays er blant de eldste og mest grunnleggende datastrukturene som brukes innen informatikk og programmering. Deres enkelhet, kombinert med deres effektivitet i visse operasjoner, gjør dem til et hovedtema for alle som fordyper seg i dataadministrasjon og manipulasjon.

En matrise er en samling av elementer, vanligvis av samme type, lagret i sammenhengende minneplasseringer.

Denne sammenhengende lagringen lar arrays gi konstant tilgang til ethvert element, gitt dets indeks. Hvert element i en matrise kalles en element, og posisjonen til et element i matrisen er definert av dens indeks, som vanligvis starter fra null.

Tenk for eksempel på en rekke heltall: [10, 20, 30, 40, 50]. Her, elementet 20 har en indeks på 1:

python array indeksering

Det er flere fordeler bruk av matriser for å lagre dataene våre. For eksempel, på grunn av deres minnelayout, tillater arrays O (1) (konstant) tidskompleksitet ved tilgang til et element ved hjelp av indeksen. Dette er spesielt gunstig når vi trenger tilfeldig tilgang til elementer. I tillegg er arrays lagret i sammenhengende minneplasseringer, som kan føre til bedre cache-lokalitet og generelle ytelsesforbedringer i visse operasjoner. En annen bemerkelsesverdig fordel med å bruke arrays er at siden arrays har en fast størrelse når de er deklarert, er det lettere å administrere minnet og unngå uventede overløp eller feil i minnet.

Merknader: Matriser er spesielt nyttige i scenarier der størrelsen på samlingen er kjent på forhånd og forblir konstant, eller hvor tilfeldig tilgang er hyppigere enn innsettinger og slettinger.

På den andre siden kommer arrays med sitt eget sett med begrensninger. En av de primære begrensningene til tradisjonelle arrays er deres fast størrelse. Når en matrise er opprettet, kan ikke størrelsen endres. Dette kan føre til problemer som bortkastet minne (hvis matrisen er for stor) eller behov for å endre størrelse (hvis matrisen er for liten). Dessuten krever å sette inn eller slette et element i midten av en matrise forskyvning av elementer, noe som fører til O (n) tidskompleksitet for disse operasjonene.

For å oppsummere alt dette, la oss illustrere hovedkarakteristikkene til arrays ved å bruke eksemplet på sangspilleliste fra begynnelsen av denne veiledningen. En matrise er en datastruktur som:

  • Er indeksert: Akkurat som hver sang på spillelisten din har et nummer (1, 2, 3, …), har hvert element i en matrise en indeks. Men i de fleste programmeringsspråk starter indeksen på 0. Så det første elementet er på indeks 0, det andre ved indeks 1, og så videre.

  • Har fast størrelse: Når du oppretter en spilleliste for for eksempel 10 sanger, kan du ikke legge til en 11. sang uten å fjerne en først. På samme måte har arrays en fast størrelse. Når du har opprettet en matrise av en viss størrelse, kan du ikke legge til flere elementer enn dens kapasitet.

  • er homogen: Alle sangene i spillelisten din er musikkspor. På samme måte er alle elementene i en matrise av samme type. Hvis du har en rekke heltall, kan du ikke plutselig lagre en tekststreng i den.

  • Har direkte tilgang: Hvis du vil høre på den 7. sangen i spillelisten din, kan du hoppe direkte til den. På samme måte, med arrays, kan du umiddelbart få tilgang til ethvert element hvis du kjenner indeksen.

  • Sammenhengende minne: Dette er litt mer teknisk. Når en matrise opprettes i en datamaskins minne, opptar den en kontinuerlig minneblokk. Tenk på det som en rad med tilstøtende skap på skolen. Hvert skap er ved siden av det andre, uten mellomrom.

Python og Arrays

Python, kjent for sin fleksibilitet og brukervennlighet, tilbyr flere måter å jobbe med matriser på. Selv om Python ikke har en innfødt array-datastruktur som noen andre språk, gir den kraftige alternativer som kan fungere på samme måte og til og med tilby utvidede muligheter.

Ved første øyekast, Pythons liste kan virke synonymt med en matrise, men det er subtile forskjeller og nyanser å vurdere:

Liste Array
En innebygd Python-datastruktur Ikke innfødt i Python - de kommer fra "array"-modulen
Dynamisk størrelse Fast (forhåndsdefinert) størrelse
Kan inneholde elementer av forskjellige datatyper Hold gjenstander av samme type
Gi en rekke innebygde metoder for manipulasjon Trenger å importere eksterne moduler
O(1) tidskompleksitet for tilgangsoperasjoner O(1) tidskompleksitet for tilgangsoperasjoner
Bruk mer minne Mer minneeffektiv

Når man ser på denne tabellen, kommer det naturlig å spørre – "Når skal du bruke hvilken?". Vel, hvis du trenger en samling som kan vokse eller krympe dynamisk og som kan inneholde blandede datatyper, er Pythons liste veien å gå. Men for scenarier som krever en mer minneeffektiv samling med elementer av samme type, kan du vurdere å bruke Pythons array modul eller eksterne biblioteker som NumPy.

De matrise Modul i Python

Når de fleste utviklere tenker på arrays i Python, tenker de ofte på lister. Python tilbyr imidlertid en mer spesialisert matrisestruktur gjennom sin innebygde array modul. Denne modulen gir en plasseffektiv lagring av grunnleggende C-stil datatyper i Python.

Mens Python-lister er utrolig allsidige og kan lagre alle typer objekter, kan de noen ganger være overkill, spesielt når du bare trenger å lagre en samling grunnleggende datatyper, som heltall eller flyter. De array modulen gir en måte å lage arrays som er mer minneeffektive enn lister for spesifikke datatyper.

Opprette en matrise

For å bruke array modul, må du først importere den:

from array import array

Når den er importert, kan du opprette en matrise ved å bruke array() konstruktør:

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

Her, den 'i' argument indikerer at matrisen vil lagre signert heltall. Det finnes flere andre typekoder tilgjengelig, som f.eks 'f' for flyter og 'd' for dobler.

Få tilgang til og endre elementer

Du kan få tilgang til og endre elementer i en matrise akkurat som du ville gjort med en liste:

print(arr[2]) 

Og nå, la oss endre elementet ved å endre dets verdi til 6:

arr[2] = 6
print(arr) 

Array metoder

De array modulen gir flere metoder for å manipulere matriser:

  • append() – Legger til et element på slutten av matrisen:

    arr.append(7)
    print(arr) 
  • extend() – Legger til iterable elementer til slutten:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Fjerner og returnerer elementet på den gitte posisjonen:

    arr.pop(2)
    print(arr) 
  • remove(): Fjerner den første forekomsten av den angitte verdien:

    arr.remove(2)
    print(arr) 
  • reverse(): Reverserer rekkefølgen til matrisen:

    arr.reverse()
    print(arr) 

OBS: Det er flere metoder enn vi har listet opp her. Referere til offisiell Python-dokumentasjon for å se en liste over alle tilgjengelige metoder i array modul.

Mens array modulen tilbyr en mer minneeffektiv måte å lagre grunnleggende datatyper på, det er viktig å huske den begrensninger. I motsetning til lister, er arrays homogen. Dette betyr at alle elementene i matrisen må være av samme type. Dessuten kan du bare lagre grunnleggende C-stil datatyper i matriser. Hvis du trenger å lagre egendefinerte objekter eller andre Python-typer, må du bruke en liste eller en annen datastruktur.

NumPy-matriser

NumPy, forkortelse for Numerical Python, er en grunnleggende pakke for numeriske beregninger i Python. En av hovedtrekkene er dens kraftige N-dimensjonalt arrayobjekt, som tilbyr raske operasjoner på matriser, inkludert matematisk, logisk, formmanipulering og mer.

NumPy-matriser er mer allsidige enn Pythons innebygde array modul og er en stift i datavitenskap og maskinlæringsprosjekter.

Hvorfor bruke NumPy Arrays?

Det første som kommer til tankene er ytelse. NumPy-matriser er implementert i C og gir mulighet for effektiv minnelagring og raskere operasjoner på grunn av optimaliserte algoritmer og fordelene med sammenhengende minnelagring.

Mens Pythons innebygde lister og matriser er endimensjonale, kan NumPy-matriser være flerdimensjonale, noe som gjør dem ideelle for å representere matriser eller tensorer.

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

Til slutt gir NumPy en et stort utvalg funksjoner å operere på disse matrisene, fra grunnleggende aritmetikk til avanserte matematiske operasjoner, omforming, splitting og mer.

OBS: Når du vet størrelsen på dataene på forhånd, kan forhåndstildeling av minne for arrays (spesielt i NumPy) føre til ytelsesforbedringer.

Opprette en NumPy-matrise

For å bruke NumPy må du først installere det (pip install numpy) og importer den deretter:

import numpy as np

Når den er importert, kan du opprette en NumPy-matrise ved å bruke array() funksjon:

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

Du kan også lage flerdimensjonale arrays:

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

Dette vil gi oss:

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

I tillegg til disse grunnleggende måtene vi kan lage matriser på, gir NumPy oss andre smarte måter vi kan lage matriser på. En av dem er arange() metode. Den lager matriser med regelmessig økende verdier:

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

En annen er linspace() metode, som lager matriser med et spesifisert antall elementer, fordelt likt mellom spesifiserte begynnelses- og sluttverdier:

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

Få tilgang til og endre elementer

Å få tilgang til og endre elementer i en NumPy-matrise er intuitiv:

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

Gjør stort sett det samme for flerdimensjonale arrays:

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

Vil endre verdien til elementet i den andre raden (indeks 1) og den tredje kolonnen (indeks 2):

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

Endre formen på en matrise

NumPy tilbyr mange funksjoner og metoder for å manipulere og operere på arrays. Du kan for eksempel bruke reshape() metode til endre formen på en matrise. La oss si at vi har en enkel matrise:

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

Og vi ønsker å omforme den til en 3×4-matrise. Alt du trenger å gjøre er å bruke reshape() metode med ønskede dimensjoner sendt som argumenter:


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

Dette vil resultere i:

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

Matrisemultiplikasjon

De numpy.dot() metoden brukes til matrisemultiplikasjon. Den returnerer punktproduktet av to matriser. For endimensjonale arrays er det indre produkt av arrayene. For 2-dimensjonale arrays tilsvarer det matrisemultiplikasjon, og for ND er det en sum produkt over den siste aksen til den første matrisen og den nest siste av den andre matrisen.

La oss se hvordan det fungerer. La oss først beregne punktproduktet til to 1-D-matriser (det indre produktet av vektorene):

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) 

Dette vil resultere i:

Dot product of two 1-D arrays:
32

32 er faktisk det indre produktet av de to matrisene – (14 + 25 + 3*6). Deretter kan vi utføre matrisemultiplikasjon av to 2D-matriser:


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) 

Som vil gi oss:

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

NumPy-matriser er et betydelig steg opp fra Pythons innebygde lister og array modul, spesielt for vitenskapelige og matematiske beregninger. Effektiviteten deres, kombinert med den rike funksjonaliteten som tilbys av NumPy-biblioteket, gjør dem til et uunnværlig verktøy for alle som ønsker å utføre numeriske operasjoner i Python.

konklusjonen

Arrays, en hjørnestein innen informatikk og programmering, har bevist sin verdi gang på gang på tvers av ulike applikasjoner og domener. I Python, denne grunnleggende datastrukturen, gjennom sine forskjellige inkarnasjoner som lister, den array modulen, og de kraftige NumPy-arrayene, tilbyr utviklere en blanding av effektivitet, allsidighet og enkelhet.

Gjennom denne veiledningen har vi reist fra de grunnleggende konseptene for arrays til deres praktiske applikasjoner i Python. Vi har sett hvordan arrays, med sin minnesammenhengende natur, gir raske tilgangstider, og hvordan Pythons dynamiske lister gir et ekstra lag av fleksibilitet. Vi har også fordypet oss i den spesialiserte verdenen til NumPy, der arrays forvandles til kraftige verktøy for numerisk beregning.

Tidstempel:

Mer fra Stackabuse