====== Mini tutoriel de la bibliothèque NumPy ======
Un tuto complet se trouve sur le [[https://numpy.org/devdocs/user/absolute_beginners.html|site officiel]]\\
Un autre très bon tuto [[https://www.tutorialspoint.com/numpy/index.htm|ici]]\\
En français un tuto plutôt orienté [[http://math.mad.free.fr/depot/numpy/essai.html|maths]] ou bien [[http://python.physique.free.fr/|physique]]
NumPy est une bibliothèque dédiée à la manipulation de tableaux, vecteurs et matrices.\\
Le principal objet que NumPy met à disposition est le **tableau**, de contenu **homogène**, de **dimension n**.\\
Contrairement aux listes, cette structure n'est pas dynamique.\\
Un tableau est indexé par un tuple d'entiers non négatifs.\\
Les types disponibles sont les types standard de Python et de nouveaux types fournis par la bibliothèque (par exemple ''numpy.int32'', ''numpy.int16'', ou ''numpy.float64'').
Les tableaux constituent la classe ndarray (alias array) dont les principaux attributs sont :
* ndarray.ndim : nombre d'axes (dimensions) du tableau. Ex. pour une matrice, ndim = 2
* ndarray.shape : dimensions du tableau. Ex. pour une matrice (n,m) shape est le tuple (n,m)
* ndarray.size : nombre total d'éléments Ex. pour une matrice (n,m), c'est n x m
* ndarray.dtype : le type des éléments du tableau (Python standard et spécifiques à NumPy)
* ndarray.itemsize : la taille en octets d'un élément
* ndarray.data permet l'accès brut aux données
Créer un tableau :
* depuis une liste : ''a = np.array([2,3,4])'' ou en dimension supérieure ''b = np.array([(1.5,2,3), (4,5,6)])''
* vide ou rempli de 0 ou de 1 : ''%%np.empty((2,3))%%'', ''%%np.zeros((3, 4))%%'', ''%%np.ones((2,3,4))%%''
* on peut préciser le type ''%%np.empty((2,3),dtype=np.float128)%%''
* rempli avec un itérable : ''np.arange(10,30,5)'' (pas 5) ou ''np.linspace(0,2,9)'' (9 valeurs en tout)
Accéder aux éléments :
* Avec un indice entre crochets : ''toto[0]''
* A partir de 2 dimensions, on peut écrire ''toto[i,j]'' ou ''toto[i][j]''
* On peut extraire un sous-tableau avec un slice sur les indices
* Mais attention ! une modification du sous-tableau se fait aussi sur le tableau
a=np.array([1, 2, 3, 4, 5])
b=a[1:3]
b[1]=0
print(a)
Produit ce résultat. Étonnant, non ?\\
''array([1, 2, 0, 4, 5])''
Effectuer des calculs :
Dans le cas général, les calculs sur les tableaux sont effectués élément par élément.\\
Par exemple :
import numpy as np
a,b = np.arange(1.,4.), np.arange(2.,5.)
print(a*b)
Produit comme résultat :\\
''array([ 2., 6., 12.])''
Autres fonctions :
* np.sort(tab)
* %%np.concatenate((a, b))%%
* np.max(tab)
* np.min(tab)
* np.sum(tab)
* np.mean(tab)
* np.std(tab)
* np.prod(tab)
Algèbre linéaire :
* np.transpose(a) # Transposée de a
* np.linalg.inv(a) # Inverse de a
* u = np.eye(3) # Matrice identité (ici 3x3)
* mat1 @ mat2 # Produit matriciel (ou produit scalaire en dimension 1)
* mat1.dot(mat2) # Même chose
* np.trace(a) # Trace
* np.linalg.eig(j) # Valeurs propres