Lijsten en NumPy-Arrays
Het kiezen van de juiste datastructuur kan zowel de snelheid als het geheugengebruik aanzienlijk beïnvloeden. Laten we eerst lijsten verkennen en deze vergelijken met NumPy-arrays om te begrijpen wanneer en hoe deze datastructuren effectief te gebruiken.
Lijst
Een list is een van de meest gebruikte datatypes. Het functioneert als een dynamische array, wat betekent dat de grootte kan groeien of krimpen wanneer dat nodig is. Lijsten zijn veelzijdig en bieden efficiënte toegang en aanpassing op willekeurige indexen. Echter, bewerkingen zoals het invoegen of verwijderen van elementen, en het zoeken naar een element (lidmaatschap controleren), kunnen traag worden bij grote lijsten. De uitzondering hierop is invoegen of verwijderen aan het einde van de lijst, wat efficiënt blijft ongeacht de grootte van de lijst.
Het is een goede keuze om lijsten te gebruiken in de volgende scenario's:
- Er is geordende data nodig;
- Er is regelmatig toegang tot of aanpassing van elementen via de index;
- Er moeten verschillende datatypes worden opgeslagen (bijvoorbeeld gehele getallen, strings of aangepaste objecten);
- Er is geen behoefte aan snelle lidmaatschapstests of snelle invoeging/verwijdering in het midden van de lijst.
123456789101112131415my_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)
NumPy-array
Hoewel lijsten veelzijdig zijn, zijn ze niet het meest efficiënt voor grootschalige numerieke bewerkingen. Hier komen NumPy-arrays van pas.
NumPy-arrays zijn geïmplementeerd in C, waardoor ze veel sneller zijn dan lijsten voor numerieke bewerkingen. Een belangrijk kenmerk is vectorisatie, waarmee bewerkingen op volledige arrays tegelijk kunnen worden uitgevoerd, zonder expliciete lussen. Dit zorgt voor aanzienlijke prestatieverbeteringen, vooral bij grote datasets.
Hier volgt een voorbeeld van het kwadrateren van elk element in een lijst (met een for-lus binnen een list comprehension) en een NumPy-array (met vectorisatie):
1234567891011121314151617181920import numpy as np import os os.system('wget https://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')
Zoals te zien is, is het prestatievoordeel van NumPy-arrays duidelijk.
Bij het werken met numerieke gegevens bieden NumPy-arrays een geheugenvoordeel ten opzichte van lijsten. Ze slaan daadwerkelijke gegevens op in aaneengesloten geheugensegmenten, waardoor ze efficiënter zijn, vooral bij grote datasets. Omdat ze homogeen zijn (hetzelfde gegevenstype), vermijden NumPy-arrays de overhead van objectreferenties.
Daarentegen zijn lijsten heterogeen en slaan ze referenties naar objecten op in aaneengesloten geheugen, terwijl de daadwerkelijke objecten elders worden opgeslagen. Deze flexibiliteit zorgt voor extra geheugengebruik bij het werken met numerieke gegevens.
Samenvattend vergelijkt de volgende tabel lijsten met NumPy-arrays:
1. U ontwikkelt een programma om een verzameling van Sensor objecten (aangepaste klasse) te beheren, elk met een timestamp (string) en een reading (float). De dataset zal in de loop van de tijd groeien en frequente updates van individuele sensorwaarden zijn vereist. Welke datastructuur is de beste keuze?
2. U werkt met een grote numerieke dataset voor een machine learning project. Welke datastructuur biedt de meest efficiënte prestaties voor deze taak?
3. U analyseert beursgegevens, bestaande uit numerieke waarden (prijzen) over de tijd. U moet snelle berekeningen uitvoeren, zoals het vinden van de gemiddelde prijs en het toepassen van wiskundige transformaties op de gegevens. Welke datastructuur zou u kiezen?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 7.69
Lijsten en NumPy-Arrays
Veeg om het menu te tonen
Het kiezen van de juiste datastructuur kan zowel de snelheid als het geheugengebruik aanzienlijk beïnvloeden. Laten we eerst lijsten verkennen en deze vergelijken met NumPy-arrays om te begrijpen wanneer en hoe deze datastructuren effectief te gebruiken.
Lijst
Een list is een van de meest gebruikte datatypes. Het functioneert als een dynamische array, wat betekent dat de grootte kan groeien of krimpen wanneer dat nodig is. Lijsten zijn veelzijdig en bieden efficiënte toegang en aanpassing op willekeurige indexen. Echter, bewerkingen zoals het invoegen of verwijderen van elementen, en het zoeken naar een element (lidmaatschap controleren), kunnen traag worden bij grote lijsten. De uitzondering hierop is invoegen of verwijderen aan het einde van de lijst, wat efficiënt blijft ongeacht de grootte van de lijst.
Het is een goede keuze om lijsten te gebruiken in de volgende scenario's:
- Er is geordende data nodig;
- Er is regelmatig toegang tot of aanpassing van elementen via de index;
- Er moeten verschillende datatypes worden opgeslagen (bijvoorbeeld gehele getallen, strings of aangepaste objecten);
- Er is geen behoefte aan snelle lidmaatschapstests of snelle invoeging/verwijdering in het midden van de lijst.
123456789101112131415my_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)
NumPy-array
Hoewel lijsten veelzijdig zijn, zijn ze niet het meest efficiënt voor grootschalige numerieke bewerkingen. Hier komen NumPy-arrays van pas.
NumPy-arrays zijn geïmplementeerd in C, waardoor ze veel sneller zijn dan lijsten voor numerieke bewerkingen. Een belangrijk kenmerk is vectorisatie, waarmee bewerkingen op volledige arrays tegelijk kunnen worden uitgevoerd, zonder expliciete lussen. Dit zorgt voor aanzienlijke prestatieverbeteringen, vooral bij grote datasets.
Hier volgt een voorbeeld van het kwadrateren van elk element in een lijst (met een for-lus binnen een list comprehension) en een NumPy-array (met vectorisatie):
1234567891011121314151617181920import numpy as np import os os.system('wget https://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')
Zoals te zien is, is het prestatievoordeel van NumPy-arrays duidelijk.
Bij het werken met numerieke gegevens bieden NumPy-arrays een geheugenvoordeel ten opzichte van lijsten. Ze slaan daadwerkelijke gegevens op in aaneengesloten geheugensegmenten, waardoor ze efficiënter zijn, vooral bij grote datasets. Omdat ze homogeen zijn (hetzelfde gegevenstype), vermijden NumPy-arrays de overhead van objectreferenties.
Daarentegen zijn lijsten heterogeen en slaan ze referenties naar objecten op in aaneengesloten geheugen, terwijl de daadwerkelijke objecten elders worden opgeslagen. Deze flexibiliteit zorgt voor extra geheugengebruik bij het werken met numerieke gegevens.
Samenvattend vergelijkt de volgende tabel lijsten met NumPy-arrays:
1. U ontwikkelt een programma om een verzameling van Sensor objecten (aangepaste klasse) te beheren, elk met een timestamp (string) en een reading (float). De dataset zal in de loop van de tijd groeien en frequente updates van individuele sensorwaarden zijn vereist. Welke datastructuur is de beste keuze?
2. U werkt met een grote numerieke dataset voor een machine learning project. Welke datastructuur biedt de meest efficiënte prestaties voor deze taak?
3. U analyseert beursgegevens, bestaande uit numerieke waarden (prijzen) over de tijd. U moet snelle berekeningen uitvoeren, zoals het vinden van de gemiddelde prijs en het toepassen van wiskundige transformaties op de gegevens. Welke datastructuur zou u kiezen?
Bedankt voor je feedback!