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

  1. Construire 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
    
### BEGIN SOLUTION
T2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
### END SOLUTION
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 colones 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]

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: il ne suffit pas d’un nombre 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:

T3D[0,:,:]
T3D[1,:,:]
T3D[2,:,:]

Exercices

Extraire la première colonne de la deuxième couche de T3D et stockez là dans la variable C:

### BEGIN SOLUTION
C = T3D[1,:,0]
### END SOLUTION
C

Notez que c’est un tableau à une dimension, donc noté en ligne!

assert list(C) == [10, 13, 16]

Extraire un tableau contenant les trois premières colonnes 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! Indication: utiliser la méthode transpose.

### BEGIN SOLUTION
C = T3D[:,:,0].transpose()
### END SOLUTION
C
for i in range(3):
    assert np.array_equal(T3D[i,:,0], 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 tous ses éléments du tableau T;

  • la moyenne de chaque ligne de T;

  • la moyenne de chaque colonne de T.

Comparez vos résultats avec ceux des calculs suivants:

T.mean()
T.mean(axis=0)
T.mean(axis=1)