Manipuler des tableaux#
Dans cette feuille, vous allez apprendre à effectuer quelques
manipulations simples sur les tableaux, comme nous l’avions fait au
premier semestre avec les vector de C++. En Python, de tels tableaux
peuvent être représentés par les array de la bibliothèque NumPy
(usuellement abrégée en np) :
import numpy as np
Tableaux à deux dimensions#
Voilà un tableau à deux dimensions avec deux lignes et quatre colonnes:
T = np.array([[1, 2, 3, 4], 
              [5, 6, 7, 8]])
T
On peut retrouver les tailles de ce tableau avec:
T.shape
Vous vous rappellez que les vector de C++ sont intrinsèquement des
tableaux à une dimension, et que l’on émule des tableaux à deux
dimensions avec des tableaux de tableaux. Ici, en revanche, les
tableaux array de numpy permettent de construire explicitement des
tableaux à deux dimensions.
Exercice#
- Construisez un tableau à trois lignes et trois colonnes, contenant les entiers de 1 à 9 de gauche à droite et de haut en bas comme dans la figure suivante: - 1 2 3 4 5 6 7 8 9 
# VOTRE CODE ICI
raise NotImplementedError()
T2
Nous testons la forme du tableau:
assert T2.shape == (3,3)
ainsi que son contenu :
assert [ T2[i,j] for i in range(3) for j in range(3) ] == [1, 2, 3, 4, 5, 6, 7, 8, 9]
Voici comment accéder au contenu d’une case individuelle du tableau :
T2[1,2]
Cette case est en deuxième ligne et troisième colonne: en effet, comme en C++, les lignes et colonnes sont numérotées à partir de 0.
Si l’on veut extraire toute une ligne, ou toute une colonne, on
remplace la coordonnée que l’on ne veut pas spécifier par :.
Voici donc la deuxième colonne :
T2[:,1]
Extrayez la deuxième ligne du tableau et affectez-la à la variable
li dont vous afficherez le contenu :
# VOTRE CODE ICI
raise NotImplementedError()
assert isinstance(li, np.ndarray)
assert li.shape == (3,)
assert list(li) == [4,5,6]
Tableaux à trois dimensions et plus#
Pour le moment, nous avons utilisé des tableaux à deux dimensions. Ultérieurement, notamment pour représenter des images, nous aurons besoin de tableaux de plus grande dimension: un seul nombre ne suffit en effet pas pour représenter un pixel.
Numpy permet de représenter des tableaux de toute dimension. Voici
un tableau de dimension 3 :
T3D = np.array([[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]],
                [[10,11,12], [13,14,15], [16,17,18]],
                [[19,20,21], [22,23,24], [25,26,27]]
                ])
On peut le voir comme un tableau à trois couches :
Pour accéder à une case du tableau on utilise T[i,j,k], où i est
le numéro de la ligne, j le numéro de la colonne et k le numéro de
la couche contenant la case.
Comme pour les listes, on peut extraire des sous-tableaux avec les opérateurs de découpe de tranches (slicing).
Indication
Rappel: tranches (slices)
Lorsque L est une liste, l’opération L[start:stop:step] permet
d’extraire une tranche de L, liste contenant tous les éléments de
L d’indice entre start (inclus) et stop (exclus) par pas de
step. Par défaut, start vaut 0, stop vaut len(L), et step
vaut 1. Ainsi, L[:3] contient les trois premiers éléments de L
(d’indice i<3) tandis que L[3:] contient les éléments suivants
(d’indice 3<=i).
Plus généralement, cette opération s’applique à la plupart des objets indexés par des entiers.
On peut ainsi extraire ces couches comme suit :
T3D[:,:,0]
T3D[:,:,1]
T3D[:,:,2]
Exercices#
Extrayez la première colonne de la deuxième couche de T3D et
stockez-la dans la variable C:
# VOTRE CODE ICI
raise NotImplementedError()
C
Notez que c’est un tableau à une dimension, donc noté en ligne !
assert list(C) == [2, 11, 20]
Maintenant, extrayez un tableau contenant la première colonne de chacune des trois
couches de T3D et stockez le dans la variable C. Notez que l’on
souhaite que ces colonnes soient bien représentées par des colonnes
dans C !
# VOTRE CODE ICI
raise NotImplementedError()
C
for i in range(3):
    assert np.array_equal(T3D[:,0,i], C[:,i])
Statistiques simples sur les tableaux#
Numpy permet de faire des statistiques simples sur les
tableaux. Revenons à notre tableau T :
T
Calculez à la main :
- la moyenne de chaque colonne de - T;
- la moyenne de chaque ligne de - T;
- la moyenne de tous les éléments du tableau - T.
Comparez vos résultats avec ceux des calculs suivants. Que calcule chaque commande ci-dessous?
T.mean(axis=0)
REPONDEZ ICI
T.mean(axis=1)
REPONDEZ ICI
T.mean()
REPONDEZ ICI
Conclusion#
Voilà, vous avez vu tous les éléments de manipulation des tableaux
NumPy dont nous aurons besoin aujourd’hui.