Le module 'numpy' permet des calculs numériques rapides en Python. Il fournit des vecteurs, matrices et les opérateurs matriciels sont rapides. Importez le module numpy.
import numpy as np
Conseils importants :
y=numpy.zeros(5)
et pas
y=numpy.zeros((5,1))
Avec la première manière vous pouvez écrire y[5]
et pas avec la seconde.
numpy
¶Les vecteurs et les matrices peuvent être créés à partir de :
Pour de bonnes performances, les affectations en Python ne copient pas les objets mais uniquement des références d'objets. Ainsi, quand des objets sont passés entre les fonctions, cela évite de surcharger la mémoire.
# a 3x2 array
A = np.array([[1, 2, 3], [4, 5, 6]])
print(A)
# Affecter A à B (Ceci ne crée pas une copie, mais une référence)
B = A
print(B)
# Si on mofifie B, qu'advient-il de A?
B[1,1]=-5
print(A)
print(B)
Pour éviter ce comportement, afion d'obtenir un objet B
indépendant de A
, il est nécessaire d'utiliser la function copy
:
C = np.copy(A)
print(A)
print(C)
C[-1,-1] = -10
print(A)
print(C)
Les vecteurs et les matrices de numpy sont des objets disposant d'un certain nombre d'attributs et de méthodes attachés.
Les vecteurs et matrices ont une taille. Ceci est l'attribut shape
.
A.shape
Le nombre d'éléments est disponible à l'aide de l'attribut size
:
A.size
Il est possible d'utiliser de manière équivalente les méthodes statiques shape() et size()
print(np.shape(A))
print(np.size(A))
Data types for arrays
int
and also int16
float
also float128
complex
also complex128
bool
object
, etc.str
Le type de l'array peut etre défini explicitement à l'aide de l'argument dtype
:
A.dtype
Mc = np.array([[1, 2], [3, 4]], dtype=complex)
print(Mc)
Pour éviter de définir manuellement des matrices de grande taille, de nombreuses fonctions numpy
permettent de générer des arrays de différentes formes. Parmi les plus courantes:
La valeur finale n'est pas contenue dans le vecteur
# create a range
x = np.arange(0, 10, 2) # arguments: start, stop, step
print(x)
x = np.arange(-1, 1.1, 0.1)
print(x)
# avec linspace, le début ET la fin sont inclus
print(np.linspace(0, 10, 25))
print(np.logspace(0, 10, 10, base=np.e))
from numpy import random
# uniform random numbers in [0,1]
print(random.rand(5,5))
# standard normal distributed random numbers
print(random.randn(5,5))
print(np.zeros((3,3)))
print(np.ones((3,3,3),dtype=int)*5)
# M is a matrix, or a 2 dimensional array, taking two indices
print(A)
print(A[1,1])
Si on omet un indice d'un array multidimensionnel, la ligne complète est retournée (ou, plus généralement, un array de dimension N-1)
print(A[1])
La même chose est obtenue en utilisant :
à la place d'un indice:
print(A[1,:]) # row 1
print(A[:,0]) # column 0
Grâce à l'indexation, de nouvelles valeurs peuvent être affectées aux éléments:
A[0,0] = -1
print(A)
# also works for rows and columns
A[1,:] = 0
A[:,2] = -1
print(A)
%matplotlib inline
import matplotlib.pyplot as plt
data = random.rand(20)
plt.plot(np.arange(20), data, 'bo-')
Les opérations doivent doivent prendre en argument des vecteurs ou des matrices pour benéficier d'une vitesse optimale (fonctions compilées).
Les opérateurs aruthmétiques habituels peuvent être utilisés.
v1 = np.arange(0, 5)
print(v1)
print(v1 * 2)
print(v1 + 2)
Le comportement par défaut correspond à des opérations terme à terme:
print(v1 * v1)
print np.dot(v1, v1)
Often it is useful to store datasets in Numpy arrays. Numpy provides a number of functions to calculate statistics of datasets in arrays.
print(data)
print(np.shape(data))
print (np.mean(data))
print(data.min())
print(data.max())
Tutoriel inspiré de :
http://researchcomputing.github.io/USGS_2014-07/Day03-Python/03b_numpy_tutorial.html
git clone https://github.com/jrjohansson/scientific-python-lectures/