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 Anvendelse af Datastrukturer
Optimeringsteknikker i Python

bookLister og NumPy-arrays

Valget af den rette datastruktur kan have stor betydning for både hastighed og hukommelsesforbrug. Lad os først undersøge lister og sammenligne dem med NumPy-arrays for at forstå, hvornår og hvordan disse datastrukturer anvendes mest effektivt.

Liste

En list er en af de mest anvendte datatyper. Den fungerer som et dynamisk array, hvilket betyder, at størrelsen kan vokse eller mindskes efter behov. Lister er alsidige og giver effektiv adgang og ændring ved vilkårlige indekser. Dog kan operationer som indsættelse eller fjernelse af elementer samt søgning efter et element (kontrol af medlemskab) blive langsomme for store lister. Undtagelsen er indsættelse eller fjernelse i slutningen af listen, som forbliver effektiv uanset listens størrelse.

Lister er et godt valg i følgende scenarier:

  • Behov for ordnet data;
  • Hyppig adgang til eller ændring af elementer via indeks;
  • Behov for at gemme forskellige datatyper (f.eks. heltal, strenge eller brugerdefinerede objekter);
  • Intet krav om hurtig medlemskabstest eller hurtig indsættelse/fjernelse 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

Selvom lister er alsidige, er de ikke de mest effektive til storskala numeriske operationer. Det er her, NumPy arrays kommer ind i billedet.

NumPy arrays er implementeret i C, hvilket gør dem meget hurtigere end lister til numeriske operationer. En vigtig faktor er vektorisering, som muliggør operationer på hele arrays på én gang uden behov for eksplicitte løkker. Dette giver betydelige ydelsesforbedringer, især med store datasæt.

Eksempel på at kvadrere hvert element i en liste (ved brug af en for-løkke i en list comprehension) og et NumPy array (ved brug af 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 det kan ses, er præstationsfordelen ved NumPy-arrays ganske tydelig.

Ved håndtering af numeriske data giver NumPy-arrays en hukommelsesfordel i forhold til lister. De lagrer faktiske data i sammenhængende hukommelsesblokke, hvilket gør dem mere effektive, især for store datasæt. Da de er homogene (samme datatyper), undgår NumPy-arrays overhead fra objektreferencer.

I modsætning hertil er lister heterogene og lagrer referencer til objekter i sammenhængende hukommelse, mens de faktiske objekter er lagret andre steder. Denne fleksibilitet medfører ekstra hukommelsesforbrug ved arbejde med numeriske data.

Sammenfattende sammenligner følgende tabel lister med NumPy-arrays:

1. Du udvikler et program til at håndtere en samling af Sensor objekter (brugerdefineret klasse), som hver indeholder et timestamp (streng) og en reading (float). Datasættet vil vokse over tid, og hyppige opdateringer af individuelle sensoraflæsninger er nødvendige. Hvilken datastruktur vil være det bedste valg?

2. Du arbejder med et stort numerisk datasæt til et maskinlæringsprojekt. Hvilken datastruktur vil give den mest effektive ydeevne til denne opgave?

3. Du analyserer aktiemarkedsdata, som består af numeriske værdier (priser) over tid. Du skal udføre hurtige beregninger, såsom at finde gennemsnitsprisen og anvende matematiske transformationer på dataene. Hvilken datastruktur vil du vælge?

question mark

Du udvikler et program til at håndtere en samling af Sensor objekter (brugerdefineret klasse), som hver indeholder et timestamp (streng) og en reading (float). Datasættet vil vokse over tid, og hyppige opdateringer af individuelle sensoraflæsninger er nødvendige. Hvilken datastruktur vil være det bedste valg?

Select the correct answer

question mark

Du arbejder med et stort numerisk datasæt til et maskinlæringsprojekt. Hvilken datastruktur vil give den mest effektive ydeevne til denne opgave?

Select the correct answer

question mark

Du analyserer aktiemarkedsdata, som består af numeriske værdier (priser) over tid. Du skal udføre hurtige beregninger, såsom at finde gennemsnitsprisen og anvende matematiske transformationer på dataene. Hvilken datastruktur vil du vælge?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

Can you explain more about when to use lists versus NumPy arrays?

What are some common mistakes when choosing between lists and NumPy arrays?

Can you give more examples of operations that are faster with NumPy arrays?

Awesome!

Completion rate improved to 7.69

bookLister og NumPy-arrays

Stryg for at vise menuen

Valget af den rette datastruktur kan have stor betydning for både hastighed og hukommelsesforbrug. Lad os først undersøge lister og sammenligne dem med NumPy-arrays for at forstå, hvornår og hvordan disse datastrukturer anvendes mest effektivt.

Liste

En list er en af de mest anvendte datatyper. Den fungerer som et dynamisk array, hvilket betyder, at størrelsen kan vokse eller mindskes efter behov. Lister er alsidige og giver effektiv adgang og ændring ved vilkårlige indekser. Dog kan operationer som indsættelse eller fjernelse af elementer samt søgning efter et element (kontrol af medlemskab) blive langsomme for store lister. Undtagelsen er indsættelse eller fjernelse i slutningen af listen, som forbliver effektiv uanset listens størrelse.

Lister er et godt valg i følgende scenarier:

  • Behov for ordnet data;
  • Hyppig adgang til eller ændring af elementer via indeks;
  • Behov for at gemme forskellige datatyper (f.eks. heltal, strenge eller brugerdefinerede objekter);
  • Intet krav om hurtig medlemskabstest eller hurtig indsættelse/fjernelse 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

Selvom lister er alsidige, er de ikke de mest effektive til storskala numeriske operationer. Det er her, NumPy arrays kommer ind i billedet.

NumPy arrays er implementeret i C, hvilket gør dem meget hurtigere end lister til numeriske operationer. En vigtig faktor er vektorisering, som muliggør operationer på hele arrays på én gang uden behov for eksplicitte løkker. Dette giver betydelige ydelsesforbedringer, især med store datasæt.

Eksempel på at kvadrere hvert element i en liste (ved brug af en for-løkke i en list comprehension) og et NumPy array (ved brug af 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 det kan ses, er præstationsfordelen ved NumPy-arrays ganske tydelig.

Ved håndtering af numeriske data giver NumPy-arrays en hukommelsesfordel i forhold til lister. De lagrer faktiske data i sammenhængende hukommelsesblokke, hvilket gør dem mere effektive, især for store datasæt. Da de er homogene (samme datatyper), undgår NumPy-arrays overhead fra objektreferencer.

I modsætning hertil er lister heterogene og lagrer referencer til objekter i sammenhængende hukommelse, mens de faktiske objekter er lagret andre steder. Denne fleksibilitet medfører ekstra hukommelsesforbrug ved arbejde med numeriske data.

Sammenfattende sammenligner følgende tabel lister med NumPy-arrays:

1. Du udvikler et program til at håndtere en samling af Sensor objekter (brugerdefineret klasse), som hver indeholder et timestamp (streng) og en reading (float). Datasættet vil vokse over tid, og hyppige opdateringer af individuelle sensoraflæsninger er nødvendige. Hvilken datastruktur vil være det bedste valg?

2. Du arbejder med et stort numerisk datasæt til et maskinlæringsprojekt. Hvilken datastruktur vil give den mest effektive ydeevne til denne opgave?

3. Du analyserer aktiemarkedsdata, som består af numeriske værdier (priser) over tid. Du skal udføre hurtige beregninger, såsom at finde gennemsnitsprisen og anvende matematiske transformationer på dataene. Hvilken datastruktur vil du vælge?

question mark

Du udvikler et program til at håndtere en samling af Sensor objekter (brugerdefineret klasse), som hver indeholder et timestamp (streng) og en reading (float). Datasættet vil vokse over tid, og hyppige opdateringer af individuelle sensoraflæsninger er nødvendige. Hvilken datastruktur vil være det bedste valg?

Select the correct answer

question mark

Du arbejder med et stort numerisk datasæt til et maskinlæringsprojekt. Hvilken datastruktur vil give den mest effektive ydeevne til denne opgave?

Select the correct answer

question mark

Du analyserer aktiemarkedsdata, som består af numeriske værdier (priser) over tid. Du skal udføre hurtige beregninger, såsom at finde gennemsnitsprisen og anvende matematiske transformationer på dataene. Hvilken datastruktur vil du vælge?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 1
some-alt