Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Listes et Tableaux NumPy | Utilisation Efficace des Structures de Données
Techniques d'Optimisation en Python
course content

Contenu du cours

Techniques d'Optimisation en Python

Techniques d'Optimisation en Python

1. Comprendre et Mesurer la Performance
2. Utilisation Efficace des Structures de Données
3. Améliorer les Performances avec des Outils Intégrés

book
Listes et Tableaux NumPy

Choisir la bonne structure de données peut affecter de manière significative à la fois la vitesse et l'utilisation de la mémoire. Explorons d'abord les listes et comparons-les avec les tableaux NumPy pour comprendre quand et comment utiliser ces structures de données efficacement.

Liste

Une list est l'un des types de données les plus couramment utilisés. Elle fonctionne comme un tableau dynamique, ce qui signifie que sa taille peut augmenter ou diminuer selon les besoins. Les listes sont polyvalentes, offrant un accès et une modification efficaces à des indices arbitraires. Cependant, des opérations comme l'insertion ou la suppression d'éléments, et la recherche d'un élément (vérification de l'appartenance), peuvent devenir lentes pour les grandes listes. L'exception est l'insertion ou la suppression à la fin de la liste, qui reste efficace quelle que soit la taille de la liste.

Il serait judicieux d'utiliser des listes dans les scénarios suivants :

  • Vous avez besoin de données ordonnées ;
  • Vous accédez fréquemment ou modifiez des éléments par index ;
  • Vous devez stocker différents types de données (par exemple, entiers, chaînes ou objets personnalisés) ;
  • Vous n'avez pas besoin de tests d'appartenance rapides ou d'insertion ou de suppression rapide au milieu de la liste.
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

Tableau NumPy

Bien que les listes soient polyvalentes, elles ne sont pas les plus efficaces pour les opérations numériques à grande échelle. C'est là que les tableaux NumPy entrent en jeu.

Les tableaux NumPy sont implémentés en C, ce qui les rend beaucoup plus rapides que les listes pour les opérations numériques. Un facteur clé est la vectorisation, qui permet d'effectuer des opérations sur des tableaux entiers à la fois, sans avoir besoin de boucles explicites. Cela conduit à des gains de performance significatifs, surtout avec de grands ensembles de données.

Regardons un exemple de mise au carré de chaque élément dans une liste (en utilisant une for boucle dans une compréhension de liste) et un tableau NumPy (en utilisant la vectorisation):

1234567891011121314151617181920
import 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')
copy

Comme vous pouvez le voir, l'avantage de performance des tableaux NumPy est assez évident.

Lorsqu'il s'agit de données numériques, les tableaux NumPy offrent un avantage de mémoire par rapport aux listes. Ils stockent les données réelles dans des blocs de mémoire contigus, les rendant plus efficaces, surtout pour les grands ensembles de données. Étant homogènes (même type de données), les tableaux NumPy évitent la surcharge des références d'objets.

En revanche, les listes sont hétérogènes, stockant des références à des objets dans une mémoire contiguë, avec les objets réels stockés ailleurs. Cette flexibilité introduit une surcharge de mémoire supplémentaire lors du travail avec des données numériques.

Pour résumer, le tableau suivant compare les listes avec les tableaux NumPy :

1. Vous développez un programme pour gérer une collection d'objets Sensor (classe personnalisée), chacun contenant un timestamp (chaîne) et une reading (flottant). Le jeu de données va croître avec le temps, et des mises à jour fréquentes des lectures individuelles des capteurs sont nécessaires. Quelle structure de données serait le meilleur choix ?

2. Vous travaillez avec un grand ensemble de données numériques pour un projet d'apprentissage automatique. Quelle structure de données offrirait la performance la plus efficace pour cette tâche ?

3. Vous analysez des données de marché boursier, qui consistent en des valeurs numériques (prix) au fil du temps. Vous devez effectuer des calculs rapides, tels que trouver le prix moyen et appliquer des transformations mathématiques sur les données. Quelle structure de données choisiriez-vous ?

Vous développez un programme pour gérer une collection d'objets `Sensor` (classe personnalisée), chacun contenant un `timestamp` (chaîne) et une `reading` (flottant). Le jeu de données va croître avec le temps, et des mises à jour fréquentes des lectures individuelles des capteurs sont nécessaires. Quelle structure de données serait le meilleur choix ?

Vous développez un programme pour gérer une collection d'objets Sensor (classe personnalisée), chacun contenant un timestamp (chaîne) et une reading (flottant). Le jeu de données va croître avec le temps, et des mises à jour fréquentes des lectures individuelles des capteurs sont nécessaires. Quelle structure de données serait le meilleur choix ?

Sélectionnez la réponse correcte

Vous travaillez avec un grand ensemble de données numériques pour un projet d'apprentissage automatique. Quelle structure de données offrirait la performance la plus efficace pour cette tâche ?

Vous travaillez avec un grand ensemble de données numériques pour un projet d'apprentissage automatique. Quelle structure de données offrirait la performance la plus efficace pour cette tâche ?

Sélectionnez la réponse correcte

Vous analysez des données de marché boursier, qui consistent en des valeurs numériques (prix) au fil du temps. Vous devez effectuer des calculs rapides, tels que trouver le prix moyen et appliquer des transformations mathématiques sur les données. Quelle structure de données choisiriez-vous ?

Vous analysez des données de marché boursier, qui consistent en des valeurs numériques (prix) au fil du temps. Vous devez effectuer des calculs rapides, tels que trouver le prix moyen et appliquer des transformations mathématiques sur les données. Quelle structure de données choisiriez-vous ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 1
We're sorry to hear that something went wrong. What happened?
some-alt