Programmation pour l’IA
Florent Capelli
Université d’Artois, CRIL
Librairie spécialisées dans le calcul numérique :
np.sin,
np.log etc.)np.random.uniform,
np.random.normal …)np.array):
min vs
np.min:np.array([1,2,3])np.arange(5): comme range(5)np.arange(1,10): comme range(1,10)np.linspace(1,10,100): renvoie 100 valeurs, espacées
entre 0 et 10np.eyes(3): une matrice 3×3 avec des 1 sur la diagonale et 0 ailleurs.np.diag([1,2,3]): une matrice 3×3 avec 1, 2, 3 sur la diagonale et 0 ailleurs.np.ones(3) ([1,1,1]), np.zeros(3),
([0,0,0])np.empty(4): retourne un tableau de taille 4 non
initialisé (attention, les valeurs du tableau ne sont pas
contrôlées).La plupart des fonctions numpy peuvent être appliquées
point à point sur un tableau:
np.sin(np.arange(5)) applique la fonction sinus sur
tous les nombres de 0 à 4.
map(lambda x:sin(x), l) mais plus
efficace.np.arange(5) * np.arange(5) renvoie
[ 0, 1, 4, 9, 16]np.arange(4) * np.arange(5) lève
ValueErrornp.sum([1,2,3]) renvoie
6, np.min, np.max etc.t[i]: la ième entrée (indexé à partir de 0)t[-1]: la dernièret[i:j]: les entrées i,...,j-1t[i:j:k]: les entrées i,i+k,i+2k...,
jusqu’à j-1t[:j]: jusqu’à j-1,t[j:] depuis jx=np.arange(5)
x[arange(3)+1] donne [1,2,3].x[True,False,False,False,True]) est
[0,4]x > 3 renvoie
[False, False, False, True, True]x[x % 2 == 0]? [0,2,4]numpy est particulièrement efficace avec des tableaux
ayant plus que 1 ou 2 dimensions.
x.shape renvoie un tuple avec la taille de chaque
dimension.
np.diag(4).shape renvoie
(4,4)np.empty,
np.ones, np.zeros prennent une shape en
entrée. Par exemple, np.ones((2,2,3)) renvoie:l = [[0], [1,2]] est une
listenp.array([[0], [1,2]]) renvoie une erreur car
len([0]) != len([1,2])sum va sommer sur toutes les entrées.axis=1, on renvoie un tableau t de shape (3) tel que
t[i] = ∑x[i][j]axis=0, on renvoie un tableau t de shape (4) tel que
t[j] = ∑x[i][j]axis=0, on renvoie un tableau t de
shape (4,5) tel que
t[j][k]=sum(x[i][j][k] for i in range(3))axis=(0,2), on renvoie un tableau t
de shape (4) tel que
t[j]=sum(x[i][j][k] for i in range(3) for k in range(5))Similaire avec np.min, np.max …
x.flatten(): aligne toutes les entrées d’un tableau sur
une dimension.
np.stack((x1,x2...,xn)): prend des tableaux ayant la
même shape (d1,...,dp) et crée un tableau t de
shape (n,d1,...,dp) tel que t[i] est
xi.
np.stack crée un nouveau tableau :
Fait “rouler” le tableau. Retourne une copie :
np.random: contient de nombreuses distributions.
np.random.uniform(low, high, size) : retourne un
tableau de size nombres (floats) uniformément choisis entre
low (inclu) et high (exclu)np.random.rand_int(low, high, size) : pareil pour les
entiersnp.random.normale(mean, sig, size) : retourne un
tableau de size nombres (floats) choisis selon une
distribution normale centrée en mean et d’écart type sig.Garder la seed = reproduire des expériences basées sur des générateurs pseudo-aléatoires.
Librairie pour la visualisation: diagrammes, fonctions etc.
numpyPour la visualisation, on va utiliser uniquement la partie
pyplot de matplotlib:
import matlib.pyplot as plt
On peut mettre en page les diagrammes :