Fiche de révision : Fonctions Python et introduction à NumPy

Plan du Cours

  1. Environnement Python et bibliothèques
  2. Variables opérateurs et séquences
  3. Fonctions intégrées et conversions
  4. Contrôle conditionnel et boucles
  5. Fonctions et portée des variables
  6. Itérateurs et mutabilité
  7. Modules, packages et documentation
  8. Tableaux NumPy et construction
  9. Manipulation des tableaux NumPy
  10. Manipulation et opérations NumPy
  11. Vectorisation et indexation avancée
  12. Tracé de graphiques avec Matplotlib
  13. Représentations statistiques et surfaces
  14. Visualisation des équipotentielles
  15. Transformée de Fourier discrète
  16. Convolution et zero-padding
  17. Structures de données géométriques
  18. Modules scientifiques et fichiers

1. Environnement Python et bibliothèques

Notions clés & Définitions

  • Langage interprété : Exécute les commandes au moyen d’un interpréteur, sans produire au préalable un fichier exécutable comme un langage compilé.

★ À maîtriser

  • NumPy et Matplotlib sont des bibliothèques placées au-dessus du cœur de Python, respectivement utilisées notamment pour les tableaux et la visualisation graphique.

Compléments

  • L’interpréteur Python de base est lancé en tapant python dans un terminal ou une invite de commande, et l’utilisation de python3 sous Linux évite de lancer Python 2.

📌 Un éditeur de texte sert à écrire un programme, tandis qu’un traitement de texte comme MS-Word, LibreOffice ou OpenOffice n’est pas adapté à cet usage.

  • Anaconda est une distribution gratuite qui inclut notamment des bibliothèques scientifiques, IPython, Spyder et Jupyter Notebook.

Astuce mémo

Interpréteur pour exécuter, éditeur pour écrire, IDE pour réunir les deux

2. Variables opérateurs et séquences

Notions clés & Définitions

  • Typage dynamique : Détermine ou modifie le type d’une variable lors de l’affectation d’une valeur, sans déclaration préalable obligatoire.
  • Dictionnaire : Séquence dont les éléments sont accessibles par une clé plutôt que par un numéro de position.

Points essentiels

📌 En Python, 42 crée un entier tandis que 42.0 crée un flottant, car la présence du point décimal détermine le type.

📌 Un nom de variable doit commencer par une lettre, peut contenir des lettres, des chiffres et le caractère souligné, respecte la casse et ne peut pas être un mot réservé.

  • Les opérateurs arithmétiques Python comprennent l’addition, la soustraction, la multiplication, la division, le modulo %\%, la division entière //// et la puissance **.

📌 Une chaîne de caractères est immuable, tandis qu’une liste est mutable et permet la modification de ses éléments.

📌 Le découpage d’une séquence suit la syntaxe [indice_de_début : indice_de_fin : pas], avec une borne de fin exclue et la possibilité d’utiliser des indices négatifs.

Astuce mémo

Les chaînes et tuples sont immuables, les listes sont mutables

3. Fonctions intégrées et conversions

★ À maîtriser

  • La fonction type() renvoie le type d’une variable, tandis que print() affiche sa valeur dans un programme.

  • La fonction input() lit une saisie utilisateur et renvoie toujours une chaîne qui doit être convertie si une valeur numérique est attendue.

  • Les fonctions int(), float() et str() convertissent respectivement une valeur en entier, en flottant et en chaîne de caractères.

  • La fonction len() renvoie le nombre d’éléments d’une séquence, notamment le nombre de caractères d’une chaîne ou d’éléments d’une liste.

  • La fonction range() produit une séquence d’entiers dont la borne supérieure est exclue, selon les formes range(fin), range(début, fin) ou range(début, fin, pas).

Compléments

  • La fonction del() supprime la référence à une variable, tandis que help() affiche une aide sur un objet ou une fonction.

Astuce mémo

Lire avec input, convertir avec int ou float, mesurer avec len

4. Contrôle conditionnel et boucles

Notions clés & Définitions

  • Liste en compréhension : Crée rapidement une liste à partir d’un algorithme simple, avec une syntaxe proche de la notation mathématique.

★ À maîtriser

📌 Une instruction if exécute conditionnellement un bloc, tandis qu’une boucle répète un bloc plusieurs fois ou jusqu’à ce qu’une condition soit satisfaite.

  • 🔄 Une structure conditionnelle suit généralement ces étapes:

    1. tester une condition avec if
    2. tester d’autres conditions avec elif
    3. exécuter le cas résiduel avec else
  • Une boucle for parcourt les valeurs d’un objet itérable, éventuellement générées par range(), tandis qu’une boucle while répète les instructions tant que sa condition est vraie.

📌 Dans une boucle while, le test est effectué avant la première itération, si bien qu’une condition initialement fausse empêche toute exécution du bloc.

📌 L’instruction break quitte immédiatement la boucle, tandis que continue saute le reste de l’itération courante et passe à la suivante.

Compléments

📌 La clause else associée à une boucle s’exécute lorsque toutes les itérations sont terminées sans break.

Astuce mémo

Tester avec if, répéter avec for ou while, interrompre avec break

5. Fonctions et portée des variables

Notions clés & Définitions

  • Fonction Python : Isole un bloc d’instructions réalisant une tâche définie et peut retourner une ou plusieurs valeurs dépendant de paramètres d’entrée.

★ À maîtriser

  • Une fonction Python est définie avec def, suivie d’un nom, d’une liste d’arguments entre parenthèses et d’un bloc d’instructions indenté.

📌 Une variable locale n’est visible qu’à l’intérieur de la fonction, tandis qu’une variable globale doit être déclarée avec global dans la fonction pour être accessible depuis le programme principal.

Compléments

📌 Une fonction doit être définie ou importée avant son utilisation, car l’interpréteur Python la stocke en mémoire au moment de sa définition.

📐 Formule — La fonction volume_sphere calcule le volume d’une sphère avec V=43πr3V = \frac{4}{3}\pi r^3 en appelant une fonction cube.

Astuce mémo

Procédure affiche, fonction retourne

6. Itérateurs et mutabilité

Notions clés & Définitions

  • Itérateur : Objet qui parcourt une séquence, appelée itérable, généralement créée par un générateur.
  • Types mutables : Les types mutables cités sont list, dict et set, tandis que bool, int, float, str, complex, tuple et frozenset sont immuables.

Points essentiels

📌 Dans l’instruction for i in range(10), i est un itérateur et range(10) est un générateur qui crée un objet itérable de type range.

  • Une fonction génératrice produit le prochain élément seulement lorsque l’itérateur le demande, sans pré-calculer ni stocker toute la séquence.

📌 L’instruction yield distingue une fonction génératrice d’une fonction normale en indiquant la valeur fournie à l’itérateur.

📌 L’affectation b = a copie seulement la référence vers l’objet, donc modifier un objet mutable par b modifie aussi l’objet désigné par a.

Astuce mémo

Mutable se modifie sur place, immutable change de référence

7. Modules, packages et documentation

Notions clés & Définitions

  • Module Python : Fichier portant l’extension .py qui contient une ou plusieurs fonctions ou procédures réutilisables.
  • Package Python : Répertoire qui rassemble plusieurs modules et porte le nom de ce répertoire.
  • Docstring : Texte placé juste après la déclaration d’une fonction pour documenter son rôle, ses paramètres et ses valeurs retournées, notamment afin de rendre help() utile.

★ À maîtriser

📌 La syntaxe import math conserve l’espace de noms math, tandis que from math import sqrt permet d’utiliser sqrt sans préfixe.

Compléments

📌 L’importation avec from mes_fonctions import * est déconseillée car elle augmente inutilement la mémoire utilisée et peut provoquer des conflits de noms.

  • PEP 8 recommande notamment: des indentations de 4 espaces, des imports regroupés au début, l’évitement de from ... import *, des espaces autour des opérateurs, des lignes de 79 caractères maximum

Astuce mémo

Un module est une boîte de fonctions, un package une armoire de modules

8. Tableaux NumPy et construction

Notions clés & Définitions

  • Tableau NumPy : Possède un nombre de dimensions ndim, des axes, une taille par axe donnée par shape et un nombre total d’éléments donné par size.

★ À maîtriser

  • Dans NumPy, axis=0 correspond généralement aux lignes verticales, axis=1 aux colonnes horizontales, axis=2 à la profondeur et axis=-1 au dernier axe.

  • numpy.array([[0,1,2],[3,4,5]]) crée un tableau à deux dimensions de shape (2, 3) et de size 6.

Compléments

📐 Formule — Pour un tableau NumPy, le nombre total d’éléments vérifie size=kshapeksize = \prod_{k} shape_k.

  • numpy.arange(15).reshape(3,5) crée les valeurs de 0 à 14 puis les réorganise en un tableau de 3 lignes et 5 colonnes.

  • numpy.linspace(0,2,9) crée 9 valeurs régulièrement espacées entre 0 et 2, avec la borne finale incluse contrairement à range().

Astuce mémo

ndim → shape → size

9. Manipulation des tableaux NumPy

★ À maîtriser

📌 Une tranche NumPy crée une vue sur le tableau original et non une copie profonde, tandis que numpy.array(b) crée une copie indépendante.

📌 La concaténation NumPy exige que les tableaux aient le même nombre de dimensions, sauf lorsqu’ils sont aplatis avec axis=None.

  • Dans numpy.concatenate, axis=0 ajoute les lignes, axis=1 ajoute les colonnes et axis=None aplatit les tableaux avant la concaténation.

📌 Le stacking NumPy ressemble à la concaténation mais ajoute un nouvel axe, tandis que numpy.hstack, numpy.vstack et numpy.dstack empilent respectivement horizontalement, verticalement et en profondeur.

Compléments

  • Pour concaténer un vecteur avec une matrice, il faut transformer le vecteur en tableau à une ligne ou à une colonne avec numpy.newaxis.

  • numpy.tile(a, (2,2)) répète un vecteur deux fois verticalement et deux fois horizontalement, en créant un tableau à deux dimensions.

Astuce mémo

Concaténation conserve les axes, stacking crée un nouvel axe

10. Manipulation et opérations NumPy

★ À maîtriser

  • La commande numpy.newaxis ajoute une dimension à un tableau : c[numpy.newaxis,:] transforme un vecteur 1-D en tableau 2-D d’une ligne, tandis que c[:,numpy.newaxis] le transforme en tableau 2-D d’une colonne.

📌 numpy.stack empile des tableaux selon un nouvel axe, tandis que numpy.concatenate concatène selon un axe existant ; numpy.hstack, numpy.vstack et numpy.dstack sont des variantes respectivement horizontale, verticale et en profondeur.

  • numpy.tile(array,reps) répète un tableau selon chaque axe indiqué par reps ; si reps possède plus d’éléments que le nombre de dimensions, de nouveaux axes sont créés, tandis que s’il en possède moins, seuls les derniers axes sont répétés.

Compléments

  • Deux vecteurs 1-D de shape=(2,) empilés avec numpy.stack forment un tableau 2-D de shape=(2,2), et numpy.column_stack permet de former une matrice de shape=(N,M) à partir de N vecteurs de dimension M.

  • Pour un vecteur a=np.array([0,1,2]), np.tile(a,(4,1)) produit quatre lignes identiques de shape=(4,3), tandis que np.tile(a,(2,1,2)) crée un tableau de shape=(2,1,6).

Astuce mémo

Ajouter une dimension, empiler, répéter, puis réduire

11. Vectorisation et indexation avancée

★ À maîtriser

  • Les opérateurs +, -, *, ** et / s’appliquent élément par élément lorsque les tableaux ont la même taille, ce qui permet d’éviter des boucles Python explicites.

  • Pour combiner deux tableaux booléens élément par élément, il faut utiliser &, | et ~, car les opérateurs Python and, or et not ne sont pas des opérateurs élément par élément pour les tableaux.

  • numpy.dot effectue un produit scalaire pour deux tableaux 1-D et une multiplication matricielle pour deux tableaux 2-D, tandis que numpy.matmul ou l’opérateur @ sont préférables pour cette dernière opération.

  • Le broadcasting permet d’effectuer une opération entre des tableaux de formes différentes lorsque NumPy peut les transformer conceptuellement vers une forme commune, par exemple en ajoutant directement un vecteur de shape=(3,) à chaque ligne d’une matrice de shape=(4,3).

  • Un masque booléen de même dimension qu’un tableau permet de sélectionner uniquement les éléments correspondant à True et d’appliquer une opération à cette sélection.

Compléments

  • Les principales réductions NumPy sont:

    • numpy.sum
    • numpy.min
    • numpy.max
    • numpy.argmin
    • numpy.argmax
    • numpy.cumsum
    • numpy.mean
    • numpy.trace
  • numpy.flatnonzero renvoie les indices des éléments non nuls d’un tableau aplati, tandis que numpy.union1d et numpy.intersect1d calculent respectivement l’union et l’intersection de deux ensembles d’indices.

  • Dans l’exemple de dix millions de particules, le calcul vectorisé du centre de masse avec numpy.sum prend environ 0,484375 seconde, contre 25,40625 secondes avec des boucles correctement ordonnées.

Astuce mémo

Vectorisation → calculs plus rapides sans boucles explicites

12. Tracé de graphiques avec Matplotlib

Notions clés & Définitions

  • Pyplot : Module de Matplotlib, généralement importé sous l’alias plt, qui fournit les fonctions usuelles de création et d’affichage de graphiques.

★ À maîtriser

  • 🔄 La séquence usuelle est:

    1. initialiser la figure avec figure()
    2. tracer avec plot()
    3. afficher avec show()
    4. fermer avec close()
  • La fonction plot(x,y) trace une courbe à partir des abscisses x et des ordonnées y, tandis que legend() affiche les étiquettes préparées avec l’argument label de plot().

Compléments

  • Les fonctions de personnalisation sont:

    • axis
    • grid
    • xlabel
    • ylabel
    • title
  • La fonction subplot() permet d’afficher plusieurs graphiques dans une même fenêtre en indiquant notamment le nombre de lignes, le nombre de colonnes et la position du tracé.

Astuce mémo

figure → plot → show → close

13. Représentations statistiques et surfaces

Notions clés & Définitions

  • Histogramme : Représentation de la fréquence des observations dans des intervalles de valeurs, permettant de visualiser la distribution d’une variable.

★ À maîtriser

📌 scatter() représente des points sans les relier et permet de modifier leur taille, leur couleur et leur symbole, tandis que plot() est principalement utilisé pour tracer des courbes reliées.

  • 🔄 La représentation d’une surface suit trois étapes:
    1. construire le maillage avec numpy.meshgrid
    2. calculer les valeurs de la fonction sur les nœuds
    3. tracer les valeurs avec contour, contourf ou imshow

Compléments

  • Dans matplotlib.pyplot.hist, bins vaut 10 par défaut lorsqu’il est fourni comme entier, density=True transforme les effectifs en densité de probabilité dont l’intégrale vaut 1, et la fonction renvoie trois éléments.

  • Pour un maillage de coordonnées X et Y, les valeurs d’une grandeur Φ sont stockées dans un tableau 2-D Phi[i,j] correspondant à Φ(xi,yj), puis les fonctions contour, contourf, imshow, pcolor ou pcolormesh peuvent les représenter.

Astuce mémo

scatter pour des points, hist pour une distribution, contour pour une surface

14. Visualisation des équipotentielles

★ À maîtriser

  • La fonction plt.contour trace des courbes de niveau à partir des coordonnées Xxp, Yyp, du champ Phi et de niveaux régulièrement espacés entre Phi.min() et Phi.max().

Compléments

  • La commande plt.contourf colore les zones comprises entre les courbes de niveau, tandis que l’argument cmap='rainbow' définit la palette utilisée.

  • La fonction plt.imshow affiche une matrice comme une image et, dans l’exemple, normalise Phi entre 0 et 1 avec ((Phi-Phi.min())/(Phi.max()-Phi.min())).

  • Les fonctions pcolor et pcolormesh représentent un champ sur un maillage coloré, et pcolormesh peut utiliser shading='gouraud' pour interpoler l’affichage.

  • La commande plt.axis([xmin,xmax,ymin,ymax],'equal') impose les limites des axes et une même échelle sur les deux dimensions.

Astuce mémo

Contours simples → valeurs → remplissage → image

15. Transformée de Fourier discrète

Notions clés & Définitions

  • Transformée de Fourier : Exprime une fonction comme une somme ou une intégrale de fonctions de base et permet d’identifier les fréquences de ses composantes périodiques.

★ À maîtriser

📐 Formule — Pour un signal échantillonné en N points séparés par δt, le pas fréquentiel vaut Δν=1Nδt\Delta\nu=\frac{1}{N\delta t} et les fréquences discrètes vérifient νn=nNδt\nu_n=\frac{n}{N\delta t}.

📐 Formule — La transformée de Fourier discrète est approximée par f^(νn)δtk=0N1fkei2πkn/Nδtf^n\hat f(\nu_n)\approx\delta t\sum_{k=0}^{N-1}f_k e^{-i2\pi kn/N}\equiv\delta t\hat f_n.

📐 Formule — La fréquence de Nyquist est la moitié de la fréquence d’échantillonnage et vérifie νc=12δt|\nu_c|=\frac{1}{2\delta t}.

📌 Le théorème d’échantillonnage impose une fréquence d’échantillonnage au moins égale à deux fois la fréquence maximale contenue dans le signal pour éviter une représentation infidèle.

Compléments

  • Dans NumPy, numpy.fft.fft calcule la TFD, numpy.fft.ifft la TFD inverse, fftshift place la fréquence nulle au centre et fftfreq fournit les fréquences associées aux coefficients.

  • Pour un signal réel, les termes de fréquences négatives sont les conjugués complexes des termes positifs, ce qui permet d’utiliser numpy.fft.rfft et de réduire l’espace mémoire nécessaire.

Astuce mémo

Échantillonnage insuffisant → repliement spectral

16. Convolution et zero-padding

Notions clés & Définitions

  • Produit de convolution : Défini par (gh)(t)=+g(τ)h(tτ)dτ(g*h)(t)=\int_{-\infty}^{+\infty}g(\tau)h(t-\tau)\,d\tau.
  • Intercorrélation : L’intercorrélation de g et h est définie par F(t)=+g(τ+t)h(τ)dτF(t)=\int_{-\infty}^{+\infty}g(\tau+t)h(\tau)\,d\tau et se calcule avec le produit g^(ν)h^(ν)\hat g(\nu)\hat h^*(\nu).

★ À maîtriser

📌 La convolution peut être calculée par la transformée de Fourier inverse du produit des transformées de Fourier de g et h, soit F1(g^(ν)h^(ν))\mathcal{F}^{-1}(\hat g(\nu)\hat h(\nu)).

📌 Pour calculer une convolution linéaire par TFD, il faut compléter chaque signal par des zéros jusqu’à une longueur au moins égale à N+M−1, sinon le calcul produit une convolution circulaire.

Compléments

  • La convolution discrète de deux vecteurs de longueurs N et M possède N+M−1 éléments.

Astuce mémo

Avec padding : convolution linéaire ; sans padding : convolution circulaire

17. Structures de données géométriques

Notions clés & Définitions

  • Point quadtree : Un point quadtree stocke des points du plan en subdivisant celui-ci en quatre quadrants et chaque nœud possède quatre fils correspondant aux directions NW, NE, SW et SE.
  • Arbre k-d : Un arbre k-d généralise la subdivision par coordonnées en séparant une cellule par un hyperplan orthogonal à un axe et chaque nœud stocke une dimension de coupe, une valeur de coupe et deux fils.
  • Courbe remplissant l’espace : Une courbe remplissant l’espace mappe des données multidimensionnelles vers un espace unidimensionnel afin de permettre l’utilisation de structures de données linéaires pour les indexer.

Points essentiels

  • En trois dimensions, la structure correspondante au quadtree est l’octree, dont le nombre de fils est lié à la subdivision en huit octants.

  • La courbe de Hilbert préserve généralement mieux la proximité spatiale que la courbe Z, car deux points proches sur la courbe restent plus souvent proches après le repliement.

Astuce mémo

Quadtree → k-d tree → courbes remplissant l’espace

18. Modules scientifiques et fichiers

Notions clés & Définitions

  • Module struct : Transforme des séquences d’octets en données directement manipulables dans des variables et inversement.
  • tell() : Renvoie le nombre d’octets comptés depuis le début du fichier et indique la position du pointeur.
  • seek() : Déplace rapidement le pointeur d’un fichier d’un nombre d’octets offset à partir d’un point de référence.

Points essentiels

  • Le module scipy.constants fournit des constantes mathématiques, des constantes physiques et des valeurs issues de la recommandation CODATA 2018, avec leur valeur, leur unité et leur incertitude.

  • La fonction numpy.loadtxt lit un fichier texte numérique organisé en N lignes et M colonnes homogènes, tandis que numpy.savetxt est adaptée à l’écriture de ce type de fichier.

  • L’ouverture d’un fichier avec open(filename, mode) utilise le mode w pour écrire en écrasant le contenu, r pour lire, r+ pour lire et écrire et a pour écrire à la suite.

  • Le bloc with open(...) as f ferme automatiquement le fichier, y compris lorsqu’une erreur de lecture ou d’écriture survient.

  • Le format big endian place l’octet de poids fort en premier, tandis que le format little endian place l’octet de poids faible en premier.

  • Pour décoder un tampon binaire, on importe struct, on définit une chaîne de format, on lit les octets, puis on applique struct.unpack(fmt, buffer), qui renvoie un tuple de valeurs.

📌 struct.pack(fmt, v1, v2, ...) encode des valeurs selon un format, struct.unpack(fmt, buffer) décode un tampon selon ce format, et struct.calcsize(fmt) calcule la taille représentée par le format.

  • Les caractères d’ordre des octets sont:

    • @ : ordre natif dépendant de la machine
    • = : ordre natif avec des tailles standard
    • : big endian

    • < : little endian
    • ! : ordre réseau, c’est-à-dire big endian
  • Dans seek(offset, from_what), from_what vaut 0 pour le début du fichier, 1 pour la position courante et 2 pour la fin du fichier.

  • Les quatre niveaux principaux sont:

    • Tests unitaires
    • Tests d’intégration
    • Tests système ou d’homologation
    • Tests d’acceptation
  • 🔄 Un test fonctionnel unitaire suit cette démarche:

    1. Choisir les conditions d’entrée
    2. Calculer manuellement le résultat attendu
    3. Exécuter la fonction
    4. Comparer le résultat obtenu au résultat attendu

📌 Pour comparer deux nombres flottants, il ne faut pas tester leur égalité directe, mais vérifier que leur différence est inférieure à une précision fixée.

  • Un float Python contient 15 chiffres significatifs, ce qui rend illusoire le test de décimales au-delà de ce rang.

Astuce mémo

Texte lisible avec str ; binaire interprétable seulement avec son format

Tableaux de synthèse

Structures de contrôle Python

StructureRôleCondition de poursuite ou d’arrêt
if / elif / elseChoisir un blocRésultat des conditions
forParcourir un itérableFin des valeurs à parcourir
whileRépéter selon une conditionArrêt lorsque la condition devient fausse
break / continueModifier une boucleSortie immédiate ou passage à l’itération suivante

Types de passage et mutabilité

SituationEffet sur l’objetConséquence
Objet mutableModification possible sur placeLa fonction peut modifier l’objet appelant
Objet immutableModification sur place impossibleIl faut retourner une nouvelle valeur
Copie par référenceMême objet partagéLes modifications sont visibles par les deux noms

Teste tes connaissances

Teste tes connaissances sur Fonctions Python et introduction à NumPy avec 11 questions à choix multiples et corrections détaillées.

1. Quelle caractéristique distingue un langage interprété d’un langage compilé ?

2. Qu'est-ce qu'un environnement Python et quelles sont ses principales bibliothèques scientifiques mentionnées dans le cours?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de Fonctions Python et introduction à NumPy avec 11 flashcards interactives.

Qu'impose un langage interprété pour exécuter les commandes ?

Un interpréteur exécute les commandes sans produire un fichier exécutable.

Langage interprété

Exécute commandes sans fichier compilé

Comment lancer l'interpréteur Python 3 sous Linux pour éviter Python 2 ?

En tapant python3 dans un terminal ou une invite de commande.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches