Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lister og NumPy-arrays | Effektiv Bruk av Datastrukturer
Optimaliseringsteknikker i Python

bookLister og NumPy-arrays

Valg av riktig datastruktur kan ha stor innvirkning på både hastighet og minnebruk. La oss først utforske lister og sammenligne dem med NumPy-arrays for å forstå når og hvordan disse datastrukturene bør brukes effektivt.

Liste

En list er en av de mest brukte datatypene. Den fungerer som et dynamisk array, noe som betyr at størrelsen kan økes eller reduseres ved behov. Lister er allsidige og gir effektiv tilgang og modifikasjon ved vilkårlige indekser. Imidlertid kan operasjoner som innsetting eller fjerning av elementer, samt søk etter et element (medlemskapssjekk), bli trege for store lister. Unntaket er innsetting eller fjerning på slutten av listen, som forblir effektivt uavhengig av listenes størrelse.

Lister er et godt valg i følgende situasjoner:

  • Behov for ordnet data;
  • Hyppig tilgang til eller modifikasjon av elementer via indeks;
  • Behov for å lagre forskjellige datatyper (for eksempel heltall, strenger eller egendefinerte objekter);
  • Ikke behov for rask medlemskapssjekk eller rask innsetting/fjerning midt i listen.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

NumPy-array

Selv om lister er allsidige, er de ikke de mest effektive for numeriske operasjoner i stor skala. Det er her NumPy-arrays kommer inn i bildet.

NumPy-arrays er implementert i C, noe som gjør dem mye raskere enn lister for numeriske operasjoner. En viktig faktor er vektorisering, som gjør det mulig å utføre operasjoner på hele arrays samtidig, uten behov for eksplisitte løkker. Dette gir betydelige ytelsesforbedringer, spesielt med store datasett.

La oss se på et eksempel der vi opphøyer hvert element i en liste i andre (ved å bruke en for-løkke i en listeforståelse) og et NumPy-array (ved å bruke vektorisering):

1234567891011121314151617181920
import numpy as np import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Som du kan se, er ytelsesfordelen til NumPy-arrays ganske tydelig.

Ved håndtering av numeriske data gir NumPy-arrays en minnefordel sammenlignet med lister. De lagrer faktiske data i sammenhengende minneblokker, noe som gjør dem mer effektive, spesielt for store datasett. Siden de er homogene (samme datatyper), unngår NumPy-arrays ekstra ressursbruk knyttet til objektreferanser.

I motsetning til dette er lister heterogene, og lagrer referanser til objekter i sammenhengende minne, mens de faktiske objektene lagres andre steder. Denne fleksibiliteten gir ekstra minnebruk ved arbeid med numeriske data.

Oppsummert sammenligner følgende tabell lister med NumPy-arrays:

1. Du utvikler et program for å håndtere en samling av Sensor-objekter (egen klasse), der hvert objekt inneholder et timestamp (streng) og en reading (flyttall). Datasettet vil vokse over tid, og hyppige oppdateringer av individuelle sensorverdier er nødvendig. Hvilken datastruktur er det beste valget?

2. Du arbeider med et stort numerisk datasett til et maskinlæringsprosjekt. Hvilken datastruktur gir mest effektiv ytelse for denne oppgaven?

3. Du analyserer aksjemarkedsdata, som består av numeriske verdier (priser) over tid. Du må utføre raske beregninger, som å finne gjennomsnittsprisen og bruke matematiske transformasjoner på dataene. Hvilken datastruktur ville du valgt?

question mark

Du utvikler et program for å håndtere en samling av Sensor-objekter (egen klasse), der hvert objekt inneholder et timestamp (streng) og en reading (flyttall). Datasettet vil vokse over tid, og hyppige oppdateringer av individuelle sensorverdier er nødvendig. Hvilken datastruktur er det beste valget?

Select the correct answer

question mark

Du arbeider med et stort numerisk datasett til et maskinlæringsprosjekt. Hvilken datastruktur gir mest effektiv ytelse for denne oppgaven?

Select the correct answer

question mark

Du analyserer aksjemarkedsdata, som består av numeriske verdier (priser) over tid. Du må utføre raske beregninger, som å finne gjennomsnittsprisen og bruke matematiske transformasjoner på dataene. Hvilken datastruktur ville du valgt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 7.69

bookLister og NumPy-arrays

Sveip for å vise menyen

Valg av riktig datastruktur kan ha stor innvirkning på både hastighet og minnebruk. La oss først utforske lister og sammenligne dem med NumPy-arrays for å forstå når og hvordan disse datastrukturene bør brukes effektivt.

Liste

En list er en av de mest brukte datatypene. Den fungerer som et dynamisk array, noe som betyr at størrelsen kan økes eller reduseres ved behov. Lister er allsidige og gir effektiv tilgang og modifikasjon ved vilkårlige indekser. Imidlertid kan operasjoner som innsetting eller fjerning av elementer, samt søk etter et element (medlemskapssjekk), bli trege for store lister. Unntaket er innsetting eller fjerning på slutten av listen, som forblir effektivt uavhengig av listenes størrelse.

Lister er et godt valg i følgende situasjoner:

  • Behov for ordnet data;
  • Hyppig tilgang til eller modifikasjon av elementer via indeks;
  • Behov for å lagre forskjellige datatyper (for eksempel heltall, strenger eller egendefinerte objekter);
  • Ikke behov for rask medlemskapssjekk eller rask innsetting/fjerning midt i listen.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

NumPy-array

Selv om lister er allsidige, er de ikke de mest effektive for numeriske operasjoner i stor skala. Det er her NumPy-arrays kommer inn i bildet.

NumPy-arrays er implementert i C, noe som gjør dem mye raskere enn lister for numeriske operasjoner. En viktig faktor er vektorisering, som gjør det mulig å utføre operasjoner på hele arrays samtidig, uten behov for eksplisitte løkker. Dette gir betydelige ytelsesforbedringer, spesielt med store datasett.

La oss se på et eksempel der vi opphøyer hvert element i en liste i andre (ved å bruke en for-løkke i en listeforståelse) og et NumPy-array (ved å bruke vektorisering):

1234567891011121314151617181920
import numpy as np import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Som du kan se, er ytelsesfordelen til NumPy-arrays ganske tydelig.

Ved håndtering av numeriske data gir NumPy-arrays en minnefordel sammenlignet med lister. De lagrer faktiske data i sammenhengende minneblokker, noe som gjør dem mer effektive, spesielt for store datasett. Siden de er homogene (samme datatyper), unngår NumPy-arrays ekstra ressursbruk knyttet til objektreferanser.

I motsetning til dette er lister heterogene, og lagrer referanser til objekter i sammenhengende minne, mens de faktiske objektene lagres andre steder. Denne fleksibiliteten gir ekstra minnebruk ved arbeid med numeriske data.

Oppsummert sammenligner følgende tabell lister med NumPy-arrays:

1. Du utvikler et program for å håndtere en samling av Sensor-objekter (egen klasse), der hvert objekt inneholder et timestamp (streng) og en reading (flyttall). Datasettet vil vokse over tid, og hyppige oppdateringer av individuelle sensorverdier er nødvendig. Hvilken datastruktur er det beste valget?

2. Du arbeider med et stort numerisk datasett til et maskinlæringsprosjekt. Hvilken datastruktur gir mest effektiv ytelse for denne oppgaven?

3. Du analyserer aksjemarkedsdata, som består av numeriske verdier (priser) over tid. Du må utføre raske beregninger, som å finne gjennomsnittsprisen og bruke matematiske transformasjoner på dataene. Hvilken datastruktur ville du valgt?

question mark

Du utvikler et program for å håndtere en samling av Sensor-objekter (egen klasse), der hvert objekt inneholder et timestamp (streng) og en reading (flyttall). Datasettet vil vokse over tid, og hyppige oppdateringer av individuelle sensorverdier er nødvendig. Hvilken datastruktur er det beste valget?

Select the correct answer

question mark

Du arbeider med et stort numerisk datasett til et maskinlæringsprosjekt. Hvilken datastruktur gir mest effektiv ytelse for denne oppgaven?

Select the correct answer

question mark

Du analyserer aksjemarkedsdata, som består av numeriske verdier (priser) over tid. Du må utføre raske beregninger, som å finne gjennomsnittsprisen og bruke matematiske transformasjoner på dataene. Hvilken datastruktur ville du valgt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 1
some-alt