NumPy. Python pour le calcul scientifique. Pierre Navaro. IRMA Strasbourg. IMFS le 28 juin 2011



Documents pareils
Cours 7 : Utilisation de modules sous python

Python - introduction à la programmation et calcul scientifique

Introduction à MATLAB R

Plan du cours Cours théoriques. 29 septembre 2014

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Calcul Formel et Numérique, Partie I

Cours Informatique Master STEP

as Architecture des Systèmes d Information

Une bibliothèque de templates pour CUDA

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Optimisation de logiciels de modélisation sur centre de calcul

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

1 Recherche en table par balayage

Bases de programmation. Cours 5. Structurer les données

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Résolution de systèmes linéaires par des méthodes directes

Plan du cours. Historique du langage Nouveautés de Java 7

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Algorithmique et Programmation, IMA

TP 1. Prise en main du langage Python

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Différentiabilité ; Fonctions de plusieurs variables réelles

Cours d initiation à la programmation en C++ Johann Cuenin

4 Exemples de problèmes MapReduce incrémentaux

Calcul Formel et Numérique, Partie I

DM 1 : Montre Autoquartz ETA

Une introduction à Java


STAGE IREM 0- Premiers pas en Python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction à NetCDF

1. Structure d'un programme FORTRAN 95

INF6304 Interfaces Intelligentes

TP 1 Introduction à Matlab Février 2009

Programmer en JAVA. par Tama

ALGORITHMIQUE ET PROGRAMMATION En C

Langage Java. Classe de première SI

Architecture des Systèmes d Information Architecture des Systèmes d Information

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Génie Logiciel avec Ada. 4 février 2013

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Calcul Scientifique avec 3

Chapitre 2. Matrices

Cours de Programmation 2

Programmation linéaire

Introduction à R. Florence Yerly. Dept. de mathématiques, Université de Fribourg (CH) SP 2011

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Maple: premiers calculs et premières applications

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Représentation d un entier en base b

Les concepts de base, l organisation des données

Calcul différentiel sur R n Première partie

Cours 1 : La compilation

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Java 1.5 : principales nouveautés

Généralités sur le Langage Java et éléments syntaxiques.

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Conception de circuits numériques et architecture des ordinateurs

Initiation au logiciel R

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Programmation C. Apprendre à développer des programmes simples dans le langage C

1/ Présentation de SQL Server :

Cours d Algorithmique et de Langage C v 3.0

Initiation à l analyse en composantes principales

Cours 1. I- Généralités sur R II- Les fonctions de R et autres objets III-Les vecteurs

TP1 : Initiation à Java et Eclipse

Le langage C. Introduction, guide de reference

Fonctions de plusieurs variables

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Partie 1 - Séquence 3 Original d une fonction

PHP. PHP et bases de données

INF 321 : mémento de la syntaxe de Java

Introduction au langage C

Objets et Programmation. origine des langages orientés-objet

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

OM 1 Outils mathématiques : fonction de plusieurs variables

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

La boucle for La boucle while L utilisation du if else. while (condition) { instruction(s) }

Structurer ses données : les tableaux. Introduction à la programmation

TD3: tableaux avancées, première classe et chaînes

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

3.2. Matlab/Simulink Généralités

Initiation à la programmation en Python

Cours de Mécanique du point matériel

Analyse fonctionnelle Théorie des représentations du groupe quantique compact libre O(n) Teodor Banica Résumé - On trouve, pour chaque n 2, la classe

Simulation de variables aléatoires

Découverte de Python

Cours de Fortran 90 / 95

Cryptographie et fonctions à sens unique

Représentation des Nombres

Présentation du PL/SQL

Correction de l examen de la première session

Transcription:

NumPy Python pour le calcul scientifique Pierre Navaro IRMA Strasbourg IMFS le 28 juin 2011 Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 1 / 18

NumPy Le module incontournable du calcul scientifique avec Python. Héritier de Numeric et Numarray. Classes de base pour SciPy. S installe comme un module Python standard. Contient les fonctions de manipulation des tableaux pour le calcul numérique. Bibliothèque mathématique importante. API pour l encapsulation de codes Fortran, C/C++. Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 2 / 18

Le tableau NumPy ndarray Collection indexable et contigüe d éléments de même type Implémentation avec un vrai tableau en mémoire optimisé pour les performances Manipulation similaire à tout autre objet Python Multi-dimensionnel pour tous les types de données Les dimensions et parcours sont modifiables, les indexations souples Permet l encapsulation de tableaux fortran. Gestion possible de l interface avec des programmes Fortran/C/C++ >> import numpy as np Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 3 / 18

Le tableau NumPy ndarray Tableau de taille fixée, multidimensionnel contenant des élements de méme type et de même taille. Ce tableau peut être définit par : son contenu sous forme d une liste de valeurs : a=np.array([1,3,5,7,9,11,13,17]) ses dimensions et son profil : b=np.array([[1,2,3],[4,5,6]]) son type d élément : a=np.array([0.1, 0.0, 0.2],dtype='f') b=np.array([[1,2,3],[4,5,6]],dtype='i') http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 4 / 18

Création d un tableau numpy Fonction de ces indices >>> def initfunction(i,j):... return 100+10*i+j >>> c=numpy.fromfunction(initfunction,(5,3)) array([[ 100., 101., 102.], [ 110., 111., 112.], [ 120., 121., 122.], [ 130., 131., 132.], [ 140., 141., 142.]]) A partir d un fichier >>> import numpy >>> a=numpy.ones((3,5,7)) >>> numpy.save("data.npy",a) >>> b=numpy.load("data.npy") Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 5 / 18

Les tableaux numpy structurés (Record arrays) Numpy propose des fonctions pour créer facilement des tableaux. >>> x = np.zeros((2,),dtype=('i4,f4,a10')) >>> x[:] = [(1,2.,'Hello'),(2,3.,"World")] >>> x array([(1, 2.0, 'Hello'), (2, 3.0, 'World')], dtype=[('f0', '>i4'), ('f1', '>f4'), ('f2', ' S10')]) Dans cet exemple, nous avons créé un tableau 1D de 2 éléments. Chaque élément possède trois composantes dont les types sont entier 32 bits, flottant 32 bits et une chaine de 10 caractères. >>> x[1] (2,3.,"World") empty, empty_like, ones, ones_like, zeros, zeros_like >>> N=10 >>> import numpy >>> A = numpy.zeros(4*n*n,dtype=numpy.double).reshape(2*n,2*n) >>> B = numpy.zeros((2*n,2*n),dtype=numpy.double) http://docs.scipy.org/doc/numpy/reference/routines. array-creation.html Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 6 / 18

Identifier un type Diverses fonctions pour construire et manipuler les types La définition des types permet portabilité et interopérabilité. >>> a=array(range(4)) >>> a array([0, 1, 2, 3]) >>> a.dtype dtype('int32') >>> a.dtype.char 'l' >>> b=array(a,dtype='d') >>> b array([ 0., 1., 2., 3.]) >>> b.dtype dtype('float64') http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 7 / 18

Manipulation de profil flat : vue 1D d un tableau sans modification >>> a = indices((2,5)) >>> a array([[[0, 0, 0, 0, 0], [1, 1, 1, 1, 1]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]]) >>> a.flat[:] array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]) shape : n-uplet des dimensions d un tableau >>> a=ones((3,5,7)) >>> a.shape (3,5,7) >>> a.shape=(21,5) >>> shape(a) (21,5) La méthode reshape >>> a=arange(105).reshape((3,5,7)) Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 8 / 18

Transposition >>> a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23]]]) >>> a.t array([[[ 0, 8, 16], [ 4, 12, 20]], [[ 1, 9, 17], [ 5, 13, 21]], [[ 2, 10, 18], [ 6, 14, 22]], [[ 3, 11, 19], [ 7, 15, 23]]]) >>> b=a.t Retourne une vue du tableau, pensez à la copie!. Existe aussi la fonction : >>> a.transpose() >>> transpose(a) Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 9 / 18

Indexation >>> a=arange(24).reshape(2,3,4) >>> a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) Pour un élément dans le tableau. >>> a[0][2][1] 9 Syntaxe avec implémentation optimisée pour l accès >>> a[0,:-1] array([[0, 1, 2, 3], [4, 5, 6, 7]]) La syntaxe fonctionne pour la référence et l assignation >>> b=a[0:2] >>> a[0:2]=9 Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 10 / 18

Méthodes Associée au module >>> import numpy >>> numpy.finfo(numpy.float32).eps 1.1920929e-07 Associée à l objet ndarray >>> a=arange(6).reshape(3,2) >>> 1+sin(a) array([[ 1., 1.84147098], [ 1.90929743, 1.14112001], [ 0.2431975, 0.04107573]]) >>> a>3 array([[false, False], [False, False], [ True, True]], dtype=bool) Appliquée sur la totalité ou une partie du tableau. >>> a.max(), a.sum() (5, 15) >>> a.sum(axis=1) array([1, 5, 9]) Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 11 / 18

Copie ou référence Copie explicite b=numpy.copy(a) b=array(a, copy=true) Copie implicite et vue >>> a=array([5,3,6,1,6,7,9,0,8]) >>> sort(a) array([0, 1, 3, 5, 6, 6, 7, 8, 9]) >>> a array([5, 3, 6, 1, 6, 7, 9, 0, 8]) >>> a.sort() >>> a array([0, 1, 3, 5, 6, 6, 7, 8, 9]) Vue >>> b=a >>> b.shape=(3,3) >>> a[0]=-1 >>> a.t array([[-1, 5, 7], [-1, 6, 8], [-1, 6, 9]]) >>> b array([[-1, -1, -1], [ 5, 6, 6], [ 7, 8, 9]]) Itérateur >>> b.flat[4] 6 Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 12 / 18

Ufuncs : Universal functions Opère sur un tableau élément par élément. Exemple : add(a,b) avec a et b ndarrays est plus performant qu une boucle Vectorisable : Une fonction prend des vecteurs en entrée et produit un vecteur en sortie. L utilisateur peut utiliser l API pour créer ses propres ufuncs Syntaxe compacte sans boucle les ufuncs sont parfois difficiles à lire. >>> x=arange(10) >>> x[(x**3-9*x**2+23*x-15)==0] array([1, 3, 5]) >>> sqrt(x) array([ 0., 1., 1.41421356, 1.73205081, 2., 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) http://docs.scipy.org/doc/numpy/reference/ufuncs.html Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 13 / 18

Matrices Dérivée de ndarray. Toute matrix est au moins un ndarray Utilisée dans numpy.linalg Toujours 2D, attention un slice de Matrix est en 2D Certaines méthodes de Matrix masquent les méthodes équivalentes de ndarray >>> a=arange(9).reshape(3,3) array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> b=matrix(a) matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> b[0] matrix([[0, 1, 2]]) >>> a[0] array([0, 1, 2]) Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 14 / 18

Random : numpy.random Fonctions adaptées au ndarrays pour tous les types d éléments >>> a=numpy.random.randint(100,size=(3,2,4)) >>> a array([[[93, 19, 44, 54], [81, 63, 13, 83]], [[22, 7, 49, 82], [19, 8, 57, 7]], [[25, 40, 54, 13], [81, 16, 26, 72]]]) >>> numpy.random.shuffle(a.flat) >>> a array([[[26, 13, 19, 8], [19, 44, 72, 54]], [[25, 93, 16, 57], [81, 83, 13, 7]], [[ 7, 63, 81, 54], [49, 40, 22, 82]]]) http://docs.scipy.org/doc/numpy/reference/routines.random.html Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 15 / 18

Quelques fonctions bien utiles... trapz(y[, x, dx, axis]) : Intégration par la méthode des trapèzes. gradient(f, *varargs) : Gradient d un tableau à N dimensions. diff(a[, n, axis]) : Différences finies. dot(a, b) : Produit de matrices. inner(a, b) : Produit scalaire. cholesky(a) : Factorisation de Cholesky. eig(a) : Valeurs et vecteurs propres. eigvals(a) : Valeurs propres. det(a) : Déterminant. solve(a, b) : Solution d un système linéaire. inv(a) : Inversion de matrices. Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 16 / 18

Entrées/Sorties Formats Numpy Binaire et texte (.npy.npz) : load/save/savez/loadtxt/savetxt Pickle h5py Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 17 / 18

Pour finir fft : Fast Fourrier Transform. random : random numbers generation. linalg : Algèbre linéaire (Lapack, ATLAS ou MKL + BLAS). distutils : Outils de compilation pour les package numpy. f2py : interfacage Fortran pour Python/numpy. Quelques logiciels utilisant numpy : Scipy http://www.scipy.org. pyopencl, pycuda http://mathema.tician.de/software. pyamg http://code.google.com/p/pyamg/. femhub http://base.femhub.org/. Pierre Navaro (IRMA Strasbourg) NumPy IMFS le 28 juin 2011 18 / 18