Najah.
Mon plan de révision⚡ Défi flash

Informatique · Classes prépa (CPGE) — 1ère année — ECS

Introduction au calcul scientifique avec NumPy

Le cours expliqué simplement, les questions que tous les élèves se posent et des exercices type examen national. Programme marocain, gratuit.

📘 Fiche de cours

L'essentiel du cours

1. Introduction à NumPy

NumPy (Numerical Python) est la bibliothèque fondamentale pour le calcul scientifique en Python. Elle introduit l'objet ndarray (n-dimensional array), qui est beaucoup plus performant que les listes Python pour les calculs numériques.

2. Création de tableaux

  • À partir de listes : np.array([1, 2, 3])
  • Tableaux prédéfinis :
    • np.zeros((n, p)) : Matrice de zéros de taille $n \times p$.
    • np.ones((n, p)) : Matrice de uns.
    • np.eye(n) : Matrice identité $I_n$.
  • Suites numériques :
    • np.arange(début, fin, pas) : Exclut la fin.
    • np.linspace(début, fin, nombre) : Inclut la fin, calcule le pas automatiquement.

3. Attributs principaux

Soit A un tableau NumPy :

  • A.ndim : Nombre de dimensions (1 pour un vecteur, 2 pour une matrice).
  • A.shape : Tuple représentant les dimensions (lignes, colonnes).
  • A.size : Nombre total d'éléments.
  • A.dtype : Type des éléments (int32, float64, etc.).

4. Opérations et Fonctions

  • Opérations élément par élément : +, -, *, /, ** s'appliquent à chaque position.
  • Produit matriciel : On utilise l'opérateur @ ou la fonction np.dot(A, B).
  • Fonctions mathématiques : np.exp(A), np.sin(A), np.sqrt(A) s'appliquent à tout le tableau (vectorisation).

Méthodes à maîtriser

  • Accès aux éléments : A[i, j] pour l'élément à la ligne $i$ et colonne $j$ (les indices commencent à 0).
  • Slicing : A[i1:i2, j1:j2] pour extraire une sous-matrice. A[:, j] pour extraire la colonne $j$.
  • Redimensionnement : A.reshape(n, p) pour changer la forme sans modifier les données.
  • Agrégation : np.sum(A), np.mean(A), np.max(A) pour calculer la somme, la moyenne ou le maximum.

Exemples corrigés

Exemple 1 : Création et Slicing

import numpy as np
M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Extraire la deuxième ligne
ligne2 = M[1, :] # Résultat: [4, 5, 6]
# Extraire le bloc [[5, 6], [8, 9]]
bloc = M[1:3, 1:3]

Exemple 2 : Calcul vectorisé Calculer $y = \sin(x)$ pour 100 points entre $0$ et $2\pi$.

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

Erreurs fréquentes

  • Confondre * et @ : A * B multiplie les éléments correspondants ($a_{ij} \times b_{ij}$), alors que A @ B effectue le produit matriciel classique.
  • Oublier les parenthèses doubles : Écrire np.zeros(3, 2) au lieu de np.zeros((3, 2)).
  • Types mixtes : NumPy force un seul type par tableau. Si vous mettez un float dans un tableau d'entiers, il sera converti ou provoquera une erreur.
  • Indices hors limites : Essayer d'accéder à A[3] pour un tableau de taille 3 (les indices sont 0, 1, 2).

🌉 Jisr : les mots du chapitre FR ⇄ AR

Tu as appris les sciences en arabe ? Touche un mot pour voir sa traduction et une explication en darija.

La question que tu n'oses pas poser en classe ? Pose-la à UstadZéro jugement, même en darija, même à minuit. Il t'explique pas à pas et corrige ta démarche. Gratuit.

Défi flash : 4 questions

Sans compte

🎯 Introduction au calcul scientifique avec NumPy

1/4

Quelle commande permet de créer un vecteur contenant les entiers $[1, 3, 5, 7, 9]$ ?

❓ Questions fréquentes

Pourquoi utiliser NumPy au lieu des listes Python classiques ?

NumPy est utilisé pour trois raisons principales :

  1. Vitesse : Les opérations NumPy sont implémentées en C, ce qui les rend beaucoup plus rapides que les boucles for sur des listes.
  2. Mémoire : Les tableaux NumPy occupent moins d'espace en mémoire.
  3. Fonctionnalités : NumPy permet la "vectorisation", c'est-à-dire appliquer une opération sur tout un tableau en une seule ligne de code, sans écrire de boucles complexes.

💡 À retenir : NumPy est indispensable pour le calcul intensif et la manipulation de matrices en CPGE.

Chno l-farq bin np.arange(0, 10, 2) o np.linspace(0, 10, 5)?
  1. np.arange(0, 10, 2) : Kat-3tina des valeurs mn 0 tal 10 (bla 10) b wa7ed l-pas dyal 2. L-natija hiya [0, 2, 4, 6, 8].
  2. np.linspace(0, 10, 5) : Kat-3tina 5 dyal l-ar9am mfar9in b nafs l-massafa bin 0 o 10 (10 dakhla). L-natija hiya [0., 2.5, 5., 7.5, 10.].

💡 À retenir : arange kan-sta3mloh melli kan-3arfo l-pas, o linspace melli kan-3arfo ch7al mn raqm bghina.

Kifach n-creyi matrice dyal sfar (zeros) o n-beddel liha l-khidma dyalha ?
  1. Pour créer une matrice de zéros (ex: 3 lignes, 4 colonnes) : M = np.zeros((3, 4)).
  2. Pour modifier un élément spécifique : M[0, 1] = 5 (1ère ligne, 2ème colonne).
  3. Pour modifier toute une ligne : M[2, :] = 1.

💡 À retenir : Dima sta3mel double parenthèses ((lignes, colonnes)) f zeros o ones.

Chno hiya dik "Broadcasting" li kigoulo f NumPy?

Le broadcasting est la capacité de NumPy à effectuer des opérations entre des tableaux de tailles différentes. Par exemple, si tu ajoutes un nombre (scalaire) à une matrice, NumPy va "étendre" ce nombre à toutes les cases de la matrice automatiquement.

💡 À retenir : Le broadcasting évite de créer manuellement des copies de données pour aligner les tailles.

Comment obtenir la taille d'une matrice (lignes et colonnes) ?

On utilise l'attribut .shape.

  1. Si A est une matrice, A.shape renvoie un tuple (n_lignes, n_colonnes).
  2. Pour avoir juste le nombre de lignes : A.shape[0].
  3. Pour avoir juste le nombre de colonnes : A.shape[1].

💡 À retenir : Ne pas confondre .shape (dimensions) avec .size (nombre total d'éléments).

Kifach n-drab joj matriçat f ba3dyathom (produit matriciel) ?

F NumPy, l-3alama * kat-dir darb 3onsor b 3onsor (élément par élément). Bach t-dir l-darb l-matriçat (produit matriciel dyal l-maths), 3ndek joj toro9 :

  1. Sta3mel l-astok @ : C = A @ B.
  2. Sta3mel l-fonction np.dot() : C = np.dot(A, B).

💡 À retenir : Pour le produit matriciel $C = A \times B$, utilisez toujours @.

Comment extraire uniquement la dernière colonne d'une matrice ?

On utilise le slicing avec l'indice -1 :

  1. Soit M une matrice.
  2. La syntaxe est M[:, -1].
  3. Le : signifie "toutes les lignes" et -1 signifie "la dernière colonne".

💡 À retenir : L'indice -1 est très pratique en Python pour désigner le dernier élément.

Quelle est la différence entre A.reshape(2, 3) et A.resize(2, 3) ?
  1. A.reshape(2, 3) : Renvoie une nouvelle vue du tableau avec la nouvelle forme, mais ne modifie pas le tableau original A.
  2. A.resize(2, 3) : Modifie directement le tableau original A (ne renvoie rien).

💡 À retenir : En général, on préfère reshape pour ne pas modifier les données sources par erreur.

Comment calculer la somme de chaque colonne d'une matrice ?

On utilise la fonction np.sum() avec l'argument axis :

  1. np.sum(M, axis=0) calcule la somme le long des colonnes (résultat : un vecteur ligne).
  2. np.sum(M, axis=1) calcule la somme le long des lignes (résultat : un vecteur colonne).

💡 À retenir : axis=0 pour les colonnes, axis=1 pour les lignes.

Peut-on mélanger des entiers et des chaînes de caractères dans un tableau NumPy ?

Non. Contrairement aux listes Python, un tableau NumPy est homogène. Tous les éléments doivent avoir le même type (ex: tous float ou tous int). Si vous essayez de mélanger, NumPy convertira tout vers le type le plus général (souvent string ou object), ce qui ralentit les calculs.

💡 À retenir : NumPy est fait pour les données numériques pures.

Comment créer une matrice identité I3 ?

On utilise la fonction np.eye(n) :

  1. I3 = np.eye(3).
  2. Cela crée une matrice $3 \times 3$ avec des 1 sur la diagonale principale et des 0 ailleurs.

💡 À retenir : eye fait référence à "I" (Identity).

Est-ce que NumPy est inclus par défaut dans Python ?

Non, NumPy est une bibliothèque externe. Il faut l'installer (souvent via pip install numpy) et surtout l'importer au début de votre script avec la commande standard : import numpy as np.

💡 À retenir : L'alias np est une convention universelle utilisée par tous les programmeurs.

✍️ Exercices type examen national

Exercice 1

Sujet : Manipulation de matrices et statistiques

On considère la matrice $A$ suivante représentant les notes de 4 étudiants dans 3 matières : $$A = \begin{pmatrix} 12 & 15 & 10 \ 8 & 11 & 14 \ 19 & 16 & 18 \ 10 & 10 & 12 \end{pmatrix}$$

  1. Écrire le code Python pour créer cette matrice sous forme d'un tableau NumPy.
  2. Extraire dans une variable notes_matiere_2 toutes les notes de la deuxième matière (deuxième colonne).
  3. Calculer la moyenne des notes pour chaque étudiant (moyenne par ligne).
  4. On souhaite augmenter toutes les notes de 1 point. Quelle opération simple permet de le faire ?
  5. Créer un masque booléen pour trouver toutes les notes supérieures ou égales à 10.
Voir la correction détaillée : inscription gratuite

Exercice 2

Sujet : Étude d'une fonction numérique

On souhaite étudier la fonction $f(x) = \frac{e^{-x^2}}{1 + x^2}$ sur l'intervalle $[-5, 5]$.

  1. Créer un vecteur X contenant 200 points régulièrement espacés entre -5 et 5.
  2. Calculer le vecteur Y correspondant aux images de X par la fonction $f$ en utilisant les fonctions vectorisées de NumPy.
  3. Déterminer la valeur maximale de $f$ sur cet intervalle ainsi que la valeur de $x$ où ce maximum est atteint (indice : utiliser np.argmax).
  4. Calculer la somme des valeurs de Y pour estimer grossièrement l'aire sous la courbe.
Voir la correction détaillée : inscription gratuite

Exercice 3

Sujet : Algèbre linéaire - Système de transition

Dans une ville, deux opérateurs de téléphonie A et B se partagent le marché. Chaque année :

  • 80% des clients de A restent fidèles à A, 20% passent chez B.
  • 70% des clients de B restent fidèles à B, 30% passent chez A. La matrice de transition est $M = \begin{pmatrix} 0.8 & 0.3 \ 0.2 & 0.7 \end{pmatrix}$. L'état initial est $V_0 = \begin{pmatrix} 1000 \ 500 \end{pmatrix}$ (1000 clients pour A, 500 pour B).
  1. Représenter $M$ et $V_0$ avec NumPy.
  2. Calculer l'état du marché après 1 an ($V_1 = M \times V_0$).
  3. Calculer l'état du marché après 10 ans ($V_{10} = M^{10} \times V_0$). Note : On pourra utiliser np.linalg.matrix_power.
  4. Vérifier que le nombre total de clients reste constant (1500).
Voir la correction détaillée : inscription gratuite

Un prof de Informatique pour aller plus loin

Les cours du soir avec des profs vérifiés arrivent : inscris-toi pour être prévenu(e) en premier.

Être prévenu(e) gratuitement

Autres chapitres de Informatique