Leçon 3 — Les types de données et la gestion de la mémoire avec NumPy
Les types NumPy ne sont pas juste une catégorie technique obscure que seuls les développeurs à lunettes rondes comprennent. Non. Ils sont au cœur de l’efficacité, de la vitesse et de la puissance de NumPy.
Si tu as suivi la leçon précédente sur les tableaux NumPy (ndarray), tu sais déjà que NumPy travaille comme un ingénieur suisse : précis, efficace, et jamais en retard.
Mais ce qui lui permet d’être aussi rapide, ce sont justement…
👉 les types NumPy.
Ce sont eux qui déterminent :
- combien de mémoire ton tableau consomme
- à quelle vitesse NumPy peut effectuer des opérations
- le type d’informations qu’il peut stocker
- la compatibilité entre les tableaux
- la précision des calculs scientifiques
En bref :
💡 Les types NumPy influencent directement la performance de ton code.
Et tu vas voir que maîtriser les types NumPy peut faire gagner des secondes, des minutes… ou même des gigaoctets de RAM sur de gros projets.
Avant d’aller plus loin :
👉 Si tu as raté la leçon 2, commence par ici :
https://www.coindudev.com/tableaux-numpy-ndarray/
(Ça t’évitera de regarder ce cours comme si c’était du chinois.)
C’est quoi, un type NumPy ?
Les types NumPy (dtypes : data types) indiquent la nature des données stockées dans un tableau.
Quelques exemples :
| Type NumPy | Description | Exemple |
|---|---|---|
int32 | entiers 32 bits | 42 |
float64 | décimaux haute précision | 3.14 |
bool | booléens | True / False |
complex128 | nombres complexes | 2 + 3j |
string_ | chaînes de caractères | “Python” |
Contrairement aux listes Python, les tableaux NumPy doivent contenir des données homogènes.
Ça veut dire :
➡️ un seul type NumPy par tableau.
C’est cette homogénéité qui rend NumPy incroyablement rapide.
Python doit vérifier le type de chaque élément…
NumPy connaît le type une fois pour toutes -> ça fonce.
Pourquoi les types NumPy rendent NumPy tellement rapide ?
Voici la différence mentale :
En Python classique (listes)
Chaque élément peut être un type différent.
Python doit stocker :
- le type
- la valeur
- la structure interne
- des pointeurs vers la mémoire
Résultat :
❌ plus lent
❌ plus lourd en mémoire
❌ moins efficace
En NumPy (ndarray + types NumPy)
Chaque élément a exactement :
- la même taille
- le même type
- le même espace contigu en mémoire
Résultat :
✔ ultra rapide
✔ parfait pour les CPU
✔ fortement optimisé en C
✔ vecteur compact
✔ calculs massifs extrêmement efficaces
Que tu sois en SIG, en IA, en SaaS, en météo, en finance, ou en e-commerce… les types NumPy seront toujours ton meilleur allié.
Comment vérifier le type NumPy d’un tableau ?
Rien de plus simple :
import numpy as np
a = np.array([1, 2, 3])
print(a.dtype)
Résultat :
int64
Les types NumPy sont stockés dans .dtype.
Changer les types NumPy : la méthode .astype()
Exemple :
b = np.array([1.7, 2.3, 5.9])
c = b.astype(int)
👉 Ici, float64 → int32
Tu peux convertir :
| Conversion | Résultat |
|---|---|
| float → int | arrondi vers zéro |
| int → float | ajoute les décimales |
| bool → int | True=1 / False=0 |
| int → bool | 0=False, sinon True |
La conversion entre types NumPy est ultra utile quand :
- tu veux réduire la mémoire
- tu veux augmenter la vitesse
- tu fais de l’analyse massive (SIG, IA, séries temporelles…)
- tu nettoies des datasets clients
Les principaux types NumPy indispensables
Les types NumPy entiers
int8: −128 à 127int16: −32 768 à 32 767int32: standardint64: pour les grandes valeurs
💡 Plus le type est large → plus il prend de mémoire.
Les types NumPy décimaux (float)
float16float32float64(le standard scientifique)
Si tu travailles en IA ou SIG :
👉 float32 suffit largement.
👉 float64 = précision scientifique (meilleur pour les calculs sensibles).
Les types NumPy complexes
Utile en :
- traitement du signal
- imagerie satellites
- analyse spectrale
- radars
- physique
Exemple :
z = np.array([2 + 3j, 5 - 2j])
print(z.dtype)
Les types NumPy de chaînes string_
Ils existent… mais franchement, évite-les 😅
Ils ne sont pas dynamiques.
Si tu veux manipuler du texte :
👉 utilise Python ou Pandas.
Les types NumPy booléens
Utile pour :
- filtrer des tableaux
- masquer des données
- nettoyer des rasters SIG
- extraire des classes
mask = data > 10
Table comparative des types NumPy (super utile 📌)
Voici un tableau explicatif :
| Type NumPy | Taille (bits) | Avantage | Inconvénient |
|---|---|---|---|
| int8 | 8 | léger | petit intervalle |
| int16 | 16 | rapide | limité |
| int32 | 32 | standard | RAS |
| int64 | 64 | grandes valeurs | lourd |
| float32 | 32 | idéal IA/SIG | précision moindre |
| float64 | 64 | très précis | plus lourd |
| bool | 8 | compact | binaire |
| complex128 | 128 | traitement signal | lourd |
Les types NumPy influencent directement ta performance.
La gestion de la mémoire avec NumPy
Pourquoi NumPy consomme moins que Python ?
Parce que les tableaux NumPy :
- sont contigus en mémoire
- utilisent un type unique
- éliminent les métadonnées Python
- stockent les valeurs dans des blocs bas niveau (C)
Résultat :
👉 jusqu’à 15× moins de mémoire que des listes Python.
Exemple de comparaison :
import numpy as np
import sys
py_list = list(range(1000))
np_array = np.arange(1000)
print("Liste Python :", sys.getsizeof(py_list))
print("Tableau NumPy :", np_array.nbytes)
Tu vas être choqué 😅
Optimiser la mémoire grâce aux types NumPy
Exemple :
Tu as une image raster SIG où les valeurs vont de 0 à 255.
Pourquoi utiliser un int32 de 4 octets ?
Passer en :
img = img.astype(np.uint8)
→ 4× moins de mémoire
→ 4× plus rapide
→ performances ++
C’est la magie des types NumPy.
La promotion automatique des types NumPy
Quand tu fais une opération, NumPy choisit automatiquement le type optimal :
a = np.array([1, 2, 3], dtype=np.int16)
b = np.array([1.5, 2.5, 3.5])
c = a + b
Résultat ?
➡️ NumPy convertit en float64
Pourquoi ?
Parce que les floats ont une “précision plus haute”
Exercices pratiques (avec correction)
Exercice 1 — Identifier les types NumPy
Crée un tableau contenant :
- un flottant
- un entier
- un booléen
Observe le dtype.
✔ Correction
a = np.array([1, 2.5, True])
print(a.dtype)
Résultat : float64
Parce que float > int > bool en priorité.
Exercice 2 — Réduire l’usage mémoire
Crée un tableau de 1 million d’entiers et convertis-le en int16.
✔ Correction
data = np.arange(1_000_000)
data2 = data.astype(np.int16)
Exercice 3 — Comparer les tailles mémoire
Affiche la différence entre une liste Python et un tableau NumPy.
✔ Correction
import numpy as np
import sys
l = list(range(10000))
a = np.arange(10000)
print(sys.getsizeof(l))
print(a.nbytes)

QCM — Test rapide
Les types NumPy permettent…
A. D’accélérer les calculs
B. De réduire la mémoire
C. De mélanger plusieurs types dans un tableau
D. Les réponses A et B
👉 Réponse : D
Quel type est le plus léger ?
A. int64
B. int32
C. int8
D. float32
👉 Réponse : C
NumPy utilise des types homogènes parce que…
A. C’est plus joli
B. Le CPU adore ça
C. Python l’impose
D. Pour t’embêter
👉 Réponse : B
Conclusion
Tu comprends maintenant que les types NumPy sont plus qu’un détail technique :
➡️ ce sont les fondations de la performance.
Que tu manipules un raster satellite, des séries temporelles financières, des signaux, des images, ou des millions de lignes de logs cloud…
👉 Les types NumPy te garantissent rapidité, précision, optimisation et puissance.
Et maintenant que tu sais comment NumPy gère ses données en profondeur, tu es enfin prêt pour la prochaine étape :
👉 Leçon 4 — Créer, sélectionner et manipuler les données avec précision grâce à la gestion de la mémoire avancée
