Extraction de sous-tableaux

Comme nous venons de le voir, l'opérateur : (colon en anglais) permet de créer facilement des listes en indiquant les valeurs de ses bornes, et optionnellement le pas.

Cet opérateur est très souvent utilisé pour définir une liste d'indices de ligne ou de colonne, pour définir un sous ensemble de cellules sur lesquelles on veut réaliser un calcul ou un traitement.

Ce que l'on appelle l'extraction d'une sous-matrice issue d'une matrice de plus grande taille est en fait un cas spécifique d'utilisation de cet opérateur, et de la syntaxe d'accès à un élément que nous avons vu précédemment.

Ainsi, si l'on veut extraire une sous-matrice, il faut spécifier les indices du bloc concerné, en indiquant les bornes de début et de fin des indices.

Syntaxe

La syntaxe générale est donc la suivante (pour un tableau à deux dimensions) :

tableau(début:fin, début:fin)

Exemple

Supposons que l'on dispose d'une matrice \(M\) définie par \(\left[\begin{array}{ccc}11 & 12 & 13 \\21 & 22 & 23 \\ 31 & 32 & 33\end{array}\right]\), et que l'on souhaite extraire le bloc \(\left[\begin{array}{cc}12 & 13 \\22 & 23 \\32 & 33\end{array}\right]\), on écrira simplement :

>> M(1:3,2:3)
 
ans =
    12  13
    22  23
    32  33

Si l'on utilise l'opérateur : seul, cela veut dire que l'on considère tous les indices possibles. C'est bien pratique pour extraire des lignes ou des colonnes spécifiques d'une matrice.

Par exemple, si l'on veut extraire les deux dernières colonnes, mais conserver toutes les lignes, on écrira :

>> M(:,2:3)
 
ans =
    12  13
    22  23
    32  33

ou pour obtenir la deuxième ligne de \(M\) :

>> M(2,:)
 
ans =
    21  22  23

Remarque

Lorsque l'on fait référence à une liste d'indices, pour extraire un vecteur d'une matrice, il est souvent utile de connaître l'indice de la dernière ligne ou de la dernière colonne. Or, bien souvent, on ne le connaît pas explicitement.

Dans ce contexte, le mot clé end peut être utilisé pour faire référence au dernier indice (sous-entendu le plus grand indice possible).

>> M(:,2:end)
 
ans =
    12  13
    22  23
    32  33