scipy
ou numpy
.¶import scipy as sp
# Ou import numpy as np
Pour créer des vecteurs et matrices, il suffit de créer des instances de array
.
Soit à partir de listes (pour les vecteurs) ou listes de listes (matrices).
x = sp.array([1,2,3])
print x
M = sp.array([[1,2,3],[4,5,6]])
print M
Soit en utilisant des fonctions (comme nous l'avons fait avec range
pour des listes).
x = sp.ones(5)
M = sp.ones((3,2))
print x
print M
M = sp.identity(3)
N = sp.diag([1,2,3])
print M
print N
x = sp.arange(10)
y = sp.linspace(0,1,11)
print x
print y
Toutes les opérations arithmétiques effectuées élément par élément, incluant la multiplication!
print x + x
print 10 * x
La fonction dot
est utilisée pour la multiplication vectorielle (entre n'importe quel pair de array
peu import s'ils sont des matrices ou vecteurs).
x = sp.array([1,2,3])
N = sp.diag([1,2,3])
print sp.dot(N, x)
print sp.dot(N, N)
L'attribut .T
permet d'obtenir la transposée.
Remarque (avancée): En fait .T
est une méthode qui est appelée avec une syntaxe particulière sans parenthèses.
M = sp.array([[1,2,3],[4,5,6]])
print M
print M.T
Voici quelques méthodes utiles pour les array
s.
print M.max()
print M.sum()
print sp.size(x)
print M.shape
Les comparateurs >
, ==
, <
etc sont aussi appliqués élément par élément.
x = sp.array([1,2,3,4])
print x > 2.5
Cela devient très utile lorsqu'on veut sélectionner des entrées d'un array
avec la syntaxe A[B]
.
A = sp.array([[4, 1, 5], [10, 9, 8], [7, 7, 5]])
print A
B = (A > 3)
print B
print A[B]
Ou si on veut modifier certains entrées seulement. Voici un exemple où on ajoute 1 à tous les entrée plus grand que 2.5.
x = sp.array([1,2,3,4])
print x
print x > 2.5
print x[x > 2.5]
x[x > 2.5] += 1
print x
La méthode .where
permet d'obtenir les coordonnée (plutôt que les entrées que donne les comparateurs).
M = sp.rand(3,3)
print M
sp.where(M > 0.5)
indices = sp.where(x > 2.5)[0]
print indices
pylab
¶import pylab as pl
Pour voir le résultat des tracées dans cette page, lancer ipython ou jupyter avec --pylab=inline
. Dans les nouvelles version, il est aussi possible de lancer d'ici:
%matplotlib inline
Pour tracer une sinusoide:
x = pl.linspace(-5,5,101) # coordonnées de -5 à 5 avec 101 valeurs
y = pl.sin(x)
pl.plot(x,y) # Tracé de la courbe !
Pour tracer plusieurs courbes, on peut les mettre les unes à la suite des autres, par exemple :
pl.plot(x, y, "r-", x, pl.cos(x), "g.")
Pour cela on utilise imshow(z)
ou pcolor(x,y,z)
.
z = pl.identity(10)
pl.imshow(z) # Affiche les entrées de la matrice z en 2D
x = pl.linspace(-5,5,201)
y = pl.linspace(-7,7,201)[:, pl.newaxis]
# newaxis indique que ce vecteur est selon la 2ème dimension
z = pl.sin(x**2 + y**2)
pl.imshow(z) # Affiche l'image en 2D
pl.imshow(z, extent=(x.min(), x.max(), y.min(), y.max()))
# On précise les coordonnées des axes
import pylab as pl
pl.figure(1, figsize=(6,6))
ax = pl.axes([0.1, 0.1, 0.8, 0.8])
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15,30,45, 10]
explode = (0, 0.05, 0, 0)
pl.pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True)
pl.title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
pl.show()