Guide till Arrays i Python

Guide till Arrays i Python

Beskrivning

Föreställ dig att du har en spellista med dina favoritlåtar på din telefon. Denna spellista är en lista där varje låt placeras i en viss ordning. Du kan spela den första låten, hoppa till den andra, hoppa till den femte och så vidare. Den här spellistan påminner mycket om en array inom datorprogrammering.

Arrays är en av de mest grundläggande och mest använda datastrukturerna.

I huvudsak är en array ett strukturerat sätt att lagra flera objekt (som siffror, tecken eller till och med andra arrayer) i en specifik ordning, och du kan snabbt komma åt, ändra eller ta bort ett objekt om du vet dess position (index).

I den här guiden ger vi dig en omfattande översikt över arraydatastrukturen. Först och främst ska vi ta en titt på vad matriser är och vilka är deras huvudsakliga egenskaper. Vi går sedan över till Pythons värld och utforskar hur arrayer implementeras, manipuleras och tillämpas i verkliga scenarier.

Förstå arraydatastrukturen

Arrayer är bland de äldsta och mest grundläggande datastrukturer som används inom datavetenskap och programmering. Deras enkelhet, i kombination med deras effektivitet i vissa operationer, gör dem till ett huvudämne för alla som gräver ner sig i området för datahantering och manipulation.

En array är en samling objekt, vanligtvis av samma typ, lagras i sammanhängande minnesplatser.

Denna sammanhängande lagring tillåter arrayer att ge konstant åtkomst till alla element, givet dess index. Varje objekt i en array kallas an elementet, och positionen för ett element i arrayen definieras av dess index, som vanligtvis börjar från noll.

Tänk till exempel på en matris med heltal: [10, 20, 30, 40, 50]. Här, elementet 20 har ett index på 1:

python array indexering

Det finns flera fördelar att använda arrayer för att lagra vår data. Till exempel, på grund av deras minneslayout tillåter arrayer O (1) (konstant) tidskomplexitet vid åtkomst till ett element genom dess index. Detta är särskilt fördelaktigt när vi behöver slumpmässig tillgång till element. Dessutom lagras arrayer i sammanhängande minnesplatser, vilket kan leda till bättre cache-lokalitet och övergripande prestandaförbättringar i vissa operationer. En annan anmärkningsvärd fördel med att använda arrayer är att eftersom arrayer har en fast storlek när de väl har deklarerats, är det lättare att hantera minne och undvika oväntade översvämningar eller fel i minnet.

Anmärkningar: Arrayer är särskilt användbara i scenarier där storleken på samlingen är känd i förväg och förblir konstant, eller där slumpmässig åtkomst är vanligare än infogning och radering.

På andra sidan kommer arrayer med sin egen uppsättning begränsningar. En av de primära begränsningarna för traditionella arrayer är deras fixad storlek. När en array väl har skapats kan dess storlek inte ändras. Detta kan leda till problem som slöseri med minne (om arrayen är för stor) eller behovet av att ändra storlek (om arrayen är för liten). Dessutom kräver att infoga eller ta bort ett element i mitten av en array förskjutning av element, vilket leder till O (n) tidskomplexitet för dessa operationer.

För att sammanfatta allt detta, låt oss illustrera de viktigaste egenskaperna hos arrayer med hjälp av låtspellistan från början av den här guiden. En array är en datastruktur som:

  • Är indexerad: Precis som varje låt på din spellista har ett nummer (1, 2, 3, …), har varje element i en array ett index. Men i de flesta programmeringsspråk börjar indexet vid 0. Så, den första posten är vid index 0, den andra vid index 1, och så vidare.

  • Har fast storlek: När du skapar en spellista för till exempel 10 låtar kan du inte lägga till en elfte låt utan att först ta bort en. På samma sätt har arrayer en fast storlek. När du väl har skapat en array av en viss storlek kan du inte lägga till fler objekt än dess kapacitet.

  • Är homogen: Alla låtar i din spellista är musikspår. På samma sätt är alla element i en array av samma typ. Om du har en uppsättning heltal kan du inte plötsligt lagra en textsträng i den.

  • Har direktåtkomst: Om du vill lyssna på den 7:e låten i din spellista kan du hoppa direkt till den. På samma sätt, med arrayer, kan du omedelbart komma åt vilket element som helst om du känner till dess index.

  • Sammanhängande minne: Det här är lite mer tekniskt. När en array skapas i en dators minne upptar den ett kontinuerligt minnesblock. Se det som en rad med intilliggande skåp i skolan. Varje skåp ligger bredvid den andra, utan mellanrum.

Python och Arrays

Python, känd för sin flexibilitet och användarvänlighet, erbjuder flera sätt att arbeta med arrayer. Även om Python inte har en inbyggd array-datastruktur som vissa andra språk, ger den kraftfulla alternativ som kan fungera på liknande sätt och till och med erbjuda utökade möjligheter.

Vid första ögonkastet, Pythons lista kan verka synonymt med en array, men det finns subtila skillnader och nyanser att ta hänsyn till:

Lista array
En inbyggd Python-datastruktur Inte inbyggt i Python – de kommer från "array"-modulen
Dynamisk storlek Fast (fördefinierad) storlek
Kan hålla objekt av olika datatyper Håll föremål av samma typ
Tillhandahåll en rad inbyggda metoder för manipulation Behöver importera externa moduler
O(1) tidskomplexitet för åtkomstoperationer O(1) tidskomplexitet för åtkomstoperationer
Förbruka mer minne Mer minneseffektiv

När man tittar på den här tabellen kommer det naturligt att fråga – "När ska man använda vilken?". Tja, om du behöver en samling som kan växa eller krympa dynamiskt och som kan innehålla blandade datatyper, är Pythons lista rätt väg att gå. Men för scenarier som kräver en mer minneseffektiv samling med element av samma typ, kan du överväga att använda Pythons array modul eller externa bibliotek som NumPy.

Smakämnen array Modul i Python

När de flesta utvecklare tänker på arrayer i Python, tänker de ofta på listor. Python erbjuder dock en mer specialiserad arraystruktur genom sin inbyggda array modul. Den här modulen ger en utrymmeseffektiv lagring av grundläggande C-format datatyper i Python.

Även om Python-listor är otroligt mångsidiga och kan lagra vilken typ av objekt som helst, kan de ibland vara överdrivna, särskilt när du bara behöver lagra en samling grundläggande datatyper, som heltal eller flöten. De array modulen ger ett sätt att skapa arrayer som är mer minneseffektiva än listor för specifika datatyper.

Skapa en Array

Att använda array modul måste du först importera den:

from array import array

När du har importerat kan du skapa en array med hjälp av array() konstruktör:

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

Här, den 'i' argument indikerar att matrisen kommer att lagra signerad heltal. Det finns flera andra typkoder tillgängliga, som t.ex 'f' för flöten och 'd' för dubbel.

Åtkomst till och modifiering av element

Du kan komma åt och ändra element i en array precis som du skulle göra med en lista:

print(arr[2]) 

Och nu, låt oss ändra elementet genom att ändra dess värde till 6:

arr[2] = 6
print(arr) 

Array-metoder

Smakämnen array modulen tillhandahåller flera metoder för att manipulera arrayer:

  • append() – Lägger till ett element i slutet av arrayen:

    arr.append(7)
    print(arr) 
  • extend() – Lägger till itererbara element i slutet:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Tar bort och returnerar elementet vid den angivna positionen:

    arr.pop(2)
    print(arr) 
  • remove(): Tar bort den första förekomsten av det angivna värdet:

    arr.remove(2)
    print(arr) 
  • reverse(): Omvänd ordning på arrayen:

    arr.reverse()
    print(arr) 

Notera: Det finns fler metoder än vi listade här. Referera till officiell Python-dokumentation för att se en lista över alla tillgängliga metoder i array modul.

Medan array modulen erbjuder ett mer minneseffektivt sätt att lagra grundläggande datatyper, det är viktigt att komma ihåg det begränsningar. Till skillnad från listor är arrayer det homogen. Det betyder att alla element i arrayen måste vara av samma typ. Dessutom kan du bara lagra grundläggande C-format datatyper i arrayer. Om du behöver lagra anpassade objekt eller andra Python-typer måste du använda en lista eller annan datastruktur.

NumPy-arrayer

NumPy, kort för Numerical Python, är ett grundläggande paket för numeriska beräkningar i Python. En av dess primära egenskaper är dess kraftfulla N-dimensionellt arrayobjekt, som erbjuder snabba operationer på arrayer, inklusive matematisk, logisk, formmanipulation och mer.

NumPy-arrayer är mer mångsidiga än Pythons inbyggda array modul och är en stapelvara i datavetenskap och maskininlärningsprojekt.

Varför använda NumPy-arrayer?

Det första som kommer att tänka på är prestanda. NumPy-arrayer är implementerade i C och möjliggör effektiv minneslagring och snabbare operationer tack vare optimerade algoritmer och fördelarna med sammanhängande minneslagring.

Medan Pythons inbyggda listor och arrayer är endimensionella, kan NumPy arrayer vara flerdimensionell, vilket gör dem idealiska för att representera matriser eller tensorer.

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Slutligen tillhandahåller NumPy en ett stort utbud av funktioner att arbeta på dessa arrayer, från grundläggande aritmetik till avancerade matematiska operationer, omformning, delning och mer.

Notera: När du vet storleken på data i förväg kan förtilldelning av minne för arrayer (särskilt i NumPy) leda till prestandaförbättringar.

Skapa en NumPy-array

För att använda NumPy måste du först installera det (pip install numpy) och importera det sedan:

import numpy as np

När du har importerat kan du skapa en NumPy-array med hjälp av array() fungera:

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

Du kan också skapa flerdimensionella arrayer:

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

Detta kommer att ge oss:

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

Förutom dessa grundläggande sätt vi kan skapa arrayer, ger NumPy oss andra smarta sätt vi kan skapa arrayer. En av dem är arange() metod. Den skapar matriser med regelbundet ökande värden:

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

En annan är linspace() metod, som skapar arrayer med ett specificerat antal element, fördelade på lika mellanrum mellan specificerade start- och slutvärden:

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

Åtkomst till och modifiering av element

Att komma åt och ändra element i en NumPy-array är intuitivt:

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

Gör ungefär samma sak för flerdimensionella arrayer:

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

Kommer att ändra värdet på elementet i den andra raden (index 1) och den tredje kolumnen (index 2):

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

Ändra formen på en array

NumPy erbjuder många funktioner och metoder för att manipulera och operera på arrayer. Du kan till exempel använda reshape() metod för att ändra formen på en array. Säg att vi har en enkel array:

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

Och vi vill omforma den till en 3×4-matris. Allt du behöver göra är att använda reshape() metod med önskade dimensioner skickade som argument:


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

Detta kommer att resultera i:

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

Matrismultiplikation

Smakämnen numpy.dot() metoden används för matrismultiplikation. Den returnerar punktprodukten av två arrayer. För endimensionella arrayer är det inre produkt av arrayerna. För 2-dimensionella arrayer motsvarar det matrismultiplikation, och för ND är det en summa produkt över den sista axeln i den första arrayen och den näst sista axeln i den andra arrayen.

Låt oss se hur det fungerar. Låt oss först beräkna punktprodukten av två 1-D-matriser (den inre produkten av vektorerna):

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) 

Detta kommer att resultera i:

Dot product of two 1-D arrays:
32

32 är i själva verket den inre produkten av de två arrayerna – (14 + 25 + 3*6). Därefter kan vi utföra matrismultiplikation av två 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) 

Vilket ger oss:

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

NumPy-arrayer är ett betydande steg upp från Pythons inbyggda listor och array modul, speciellt för vetenskapliga och matematiska beräkningar. Deras effektivitet, i kombination med den rika funktionaliteten från NumPy-biblioteket, gör dem till ett oumbärligt verktyg för alla som vill göra numeriska operationer i Python.

Slutsats

Arrays, en hörnsten inom datavetenskap och programmering, har bevisat sitt värde gång på gång över olika applikationer och domäner. I Python, denna grundläggande datastruktur, genom sina olika inkarnationer som listor, den array modulen, och de kraftfulla NumPy-arrayerna, erbjuder utvecklare en blandning av effektivitet, mångsidighet och enkelhet.

Genom den här guiden har vi rest från de grundläggande koncepten för arrayer till deras praktiska tillämpningar i Python. Vi har sett hur arrayer, med sin minnessammanhängande natur, ger snabba åtkomsttider, och hur Pythons dynamiska listor ger ett extra lager av flexibilitet. Vi har också fördjupat oss i den specialiserade världen av NumPy, där arrayer förvandlas till kraftfulla verktyg för numerisk beräkning.

Tidsstämpel:

Mer från Stackabuse