Numpy -- Episode 1
1- Numpy c’est ouf !!
NumPy est la bibliothèque (package) standard pour le calcul scientifique en Python. Son objet principal est le ndarray, un tableau multidimensionnel d'un seul type de données qui peut être trié, remodelé, soumis à des opérations mathématiques et à une analyse statistique. Les opérations et les algorithmes mathématiques implémentés en Numpy présentent deux principaux avantages par rapport aux objets standards de Python (les listes ou tuples). Tout d'abord, ils sont implémentés en langage C précompilé et approchent ainsi la vitesse d'exécution d'un programme écrit en C lui-même; deuxièmement, NumPy prend en charge la vectorisation: une seule opération peut être effectuée sur un tableau entier, plutôt que de nécessiter une boucle explicite sur les éléments du tableau. Prenons par exemple la multiplication de deux listes de n nombres à 1D, a et b :
Python standard :
c = []
for i in range(n) :
c.append(a[i]*b[i])
en utilisant les tableaux de Numpy :
c = a * b
La multiplication élément par élément est gérée par un code C optimisé et précompilé et est donc très rapide (beaucoup plus rapide pour n très grand que l’utilisation du code standard de Python). L'absence de boucles et d'indexations explicites rend le code plus propre, moins sujet aux erreurs et plus proche de la notation mathématique standard qu'il reflète.
Exercice : Ecrire un script python qui compare le temps de calcul de la multiplication de deux vecteurs de 106 éléments. Utiliser la fonction clock() ou time() du module time.
Solution : Temps Python Standard ≈ 0.59 seconds ; Temps Numpy ≈ 0.04 seconds
Toutes les fonctionnalités de Numpy sont implémentées dans la bibliothèque numpy et pour l’utiliser il est souhaitable de charger la bibliothèque dans le script python par :
import numpy as np
2- Méthodes de Base des tableaux
La classe des tableaux en Numpy est ndarray, qui consiste d’un tableau multidimensionnel d’élément indexés par un tuple d’entier. Contrairement aux listes et tuples du Python standard, les éléments d’un tableau Numpy ne peuvent pas être de types différents: chaque élément d'un tableau NumPy a le même type, qui est spécifié par un objet de type de données associé (dtype). Le tableau 1 résume les différents types de donnée dans Numpy.
Les dimensions d'un tableau NumPy sont appelées axes; le nombre d'axes d'un tableau est appellé rank (rang en français).
Type Numpy |
Description |
np.bool_ |
Booléen (True ou False) |
np.int8 |
Entier de -128 à 127 |
np.int16 |
Entier de -32768 à 32767 |
np.int32 |
Entier de -2147483648 à 2147483647 |
np.int64 |
Entier de -9223372036854775808 à 9223372036854775807 |
np.uint8 |
Entier non signé de 0 à 255 |
np.uint16 |
Entier non signé de 0 à 65535 |
np.uint32 |
Entier non signé de 0 à 4294967295 |
np.uint64 |
Entier non signé de 0 à 18446744073709551615 |
np.float32 |
Nombre réel simple précision : ±1.175494351 × 10−38 à ± 3.4028235 × 1038 |
np.float64 |
Nombre réel double précision : ±2.2250738585072014×10−308 à ±1.7976931348623157×10308 |
np.complex64 |
Nombre complexe représenté par deux nombres réels simples précisions (float32) |
np.complex128 |
Nombre complexe représenté par deux nombres réels doubles précisions (float64) |
Exemple :
>>> import numpy as np
>>> x = np.float32(1.0)
>>> x
1.0
>>> y = np.int_([1,2,4])
>>> y
array([1, 2, 4])
>>> z = np.arange(3, dtype=np.uint8)
>>> z
array([0, 1, 2], dtype=uint8)