NumPy: Manipulation de matrices Sup`Biotech 2

publicité
TD
NumPy:
Manipulation
de
matrices
Sup'Biotech 2
Python
Edouard Véron, Thibaut Barroyer
24 janvier 2017
TD: NumPy: Manipulation de matrices
2016 - 2017
Préambule
Propriété du document
Auteurs
Version
Nombre de pages
Edouard Véron, Thibaut Barroyer
1.0
8
Contact
Contacter l'équipe assistante à l'adresse suivante: supbiotech-bioinfo-bt2@googlegroups.
com
Copyright
Ce document est destiné aux étudiants de Sup'Biotech 2. Ce dernier a été téléchargé depuis
www.intranet.supbiotech.fr. Si ce n'est pas le cas, contacter l'auteur à l'adresse indiquée plus
haut.
c Assistants Sup'Biotech 2016.
1 /8
TD: NumPy: Manipulation de matrices
2016 - 2017
Table des matières
1
Introduction
2
Exercices
1
Exercice 1
Exercice 2
Exercice 3
Exercice 4
2
Création d'array . .
Indexation et slicing
Attributs . . . .
Parcours d'array . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
5
6
8
Introduction
Ce TD vient compléter le précédent TD NumPy que vous avez eu, en apportant une série
d'exercices qui vous permettra de mieux vous familiariser avec cet outil.
Je vous conseille fortement de relire ce précédent TD avant de commencer à faire les exercices,
ce qui vous permettra aussi de poser vos questions dès le départ.
La plupart des questions ne nécessite pas d'utiliser votre ordinateur, le but étant aussi de vous
entraîner à développer sur papier comme vous le faites en examens. Cela vous permettra aussi
d'être plus rigoureux dans vos raisonnements.
2
Exercices
2 /8
TD: NumPy: Manipulation de matrices
2016 - 2017
Exercice 1: Création d'array
1. Est-ce que array([1, 2, 3]) est identique à array([[1, 2, 3]]) ? Pourquoi ?
Correction:
Non, array([1, 2, 3]) est un array à 1 dimension (vecteur) tandis que
array([[1, 2, 3]]) est un array à 2 dimensions (matrice) ne contenant qu'une
seule ligne
2. Comme vous l'avez lu dans le cours, il existe plusieurs manières de créer un array. Nous
allons donc nous familiariser avec chacune d'elles, ce qui nous permettra de savoir laquelle
utiliser selon nos besoins.
Pour chaque cas ci-dessous, écrire
créer :
en une seule ligne Python
(a) un vecteur de taille 4 ne contenant que des entiers 0
Correction:
In [0]: numpy.zeros((4), dtype=int)
(b) une matrice 6x7 ne contenant que des booleens True
Correction:
In [0]: numpy.ones((6, 7), dtype=bool)
(c) un vecteur correspondant à la liste Python [5, 3, 6]
Correction:
In [0]: numpy.array([5, 3, 6])
(d) un vecteur contenant les entiers de 1 à 9
Correction:
In [0]: numpy.arange(1, 10)
3 /8
le code permettant de
TD: NumPy: Manipulation de matrices
2016 - 2017
(e) une matrice 3x3 contenant les entiers de 1 à 9
Correction:
In [0]: numpy.arange(1, 10).reshape((3,3))
(f) un array de dimensions 2x3x4, contenant que des None
Correction:
In [0]: numpy.empty((2, 3, 4), dtype=object)
3. Prenons un cas un peu plus concret : soient 2 séquences x et y.
Écrire la fonction init_matrices(x : string, y: string) -> Tuple[array] qui retourne les matrices S et B (sous forme de tuple) utilisées pour l'alignement de x et y avec
l'algorithme Levensthein, initialisées avec des 0. pour S et des None pour B.
Correction:
from numpy import zeros, empty
def init_matrices(x, y):
return (zeros((len(x) + 1, len(y) + 1), dtype=float),
empty((len(x) + 1, len(y) + 1), dtype=object))
4 /8
TD: NumPy: Manipulation de matrices
2016 - 2017
Exercice 2: Indexation et slicing
1. Donner l'indice des éléments en rouge de chaque array :
Correction:
1,
5,
9,
2,
6,
10,
3,
7,
11,
4
8
12
[2, 3]
1,
5,
9,
2,
6,
10,
3,
7,
11,
4
8
12
[1, 2]
1,
5,
9,
2,
6,
10,
3,
7,
11,
4
8
12
[0, 3]
1,
2,
3,
4
[3]
2. Faites les exercices du précédent TD sur le slicing
Correction:
Voir le corrigé du TD
3. Soit une matrice 4x5, comment faire pour récupérer la 3ème colonne ?
Correction:
In [1]: M=array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
In [2]: M
Out[2]:
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
In [3]: M[:,2:3]
Out[3]:
array([[ 3],
[ 8],
[13],
[18]])
5 /8
TD: NumPy: Manipulation de matrices
2016 - 2017
Exercice 3: Attributs
1. Quelles sont les diérences entre un attribut (d'un array par exemple) et une fonction ?
Correction:
L'attribut s'utilise en indiquant d'abord la variable sur laquelle il porte, suivie d'un '.' puis
du nom de l'attribut (sans parenthèse ni argument).
La fonction s'utilise quand à elle en écrivant le nom de la fonction suivi d'une parenthèse
ouvrante '(', du ou des éventuels arguments, puis d'une parenthèse fermante ')'
2. Remplacer le ' ?' par la valeur des attributs utilisés ci-dessous :
In [0]: m = numpy.zeros((5, 2, 4))
In [1]: m.ndim
Out[1]: ?
Correction:
Out[1]: 3
In [2]: m.size
Out[2]: ?
Correction:
Out[2]: 40
In [3]: m.shape
Out[3]: ?
Correction:
6 /8
TD: NumPy: Manipulation de matrices
2016 - 2017
Out[3]: (5, 2, 4)
In [4]: v = ones(1)
In [5]: v.ndim
Out[5]: ?
Correction:
Out[5]: 1
In [6]: v.shape
Out[6]: ?
Correction:
Out[6]: (1,)
In [7]: v.size
Out[7]: ?
Correction:
Out[7]: 1
7 /8
TD: NumPy: Manipulation de matrices
2016 - 2017
Exercice 4: Parcours d'array
1. En utilisant une boucle, écrire la fonction my_array qui prend en argument une liste Python
et renvoie le vecteur (au sens array NumPy) correspondant.
Correction:
def my_array(l):
v = zeros(len(l))
i = 0
while i < len(l):
v[i] = l[i]
i += 1
return v
2. Écrire la fonction print_vect prenant en argument un vecteur et qui ache chaque élément
séparé par un ' ;'. Tous les éléments achés doivent être sur la même ligne :
In [0]: v = array([1, 2, 3])
In [1]: print_vect(v)
1;2;3;
Correction:
def print_vect(v):
s = ""
for e in v:
s += str(e) + ";"
print(s)
3. En utilisant uniquement des boucles while, écrire la fonction fill_matrix prenant en
argument une matrice S et qui remplit toutes ses cases (sauf la bordure haute et la bordure
gauche) en prenant le minimum des 3 valeurs autour (gauche, diagonal haut-gauche et haut)
+ 1, c'est-à-dire comme ce qui est fait dans l'algorithme itératif de Levenshtein dans le cas
où x0 6= y0
Correction:
Je vous laisse y rééchir et me poser vos questions...
8 /8
Téléchargement