Indexation des matrices
Dans MATLAB®, trois approches primaires permettent d’accéder aux éléments d’un tableau sur la base de leur emplacement (index) dans le tableau. Ces approches sont l’indexation par position, l’indexation linéaire et l’indexation logique. Vous pouvez également utiliser une indexation mixte en combinant les indexations positionnelle et logique.
Indexation avec positions des éléments
L’approche la plus courante est de spécifier explicitement les indices des éléments. Par exemple, pour accéder à un élément unique d’une matrice, spécifiez le numéro de ligne suivi du numéro de colonne de l’élément.
A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = 4×4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
e = A(3,2)
e = 10
e
est l’élément à la position 3,2 (troisième ligne, deuxième colonne) de A
.
Vous pouvez également référencer plusieurs éléments à la fois en spécifiant leurs indices dans un vecteur. Par exemple, accédez aux premier et troisième éléments de la deuxième ligne de A
.
r = A(2,[1 3])
r = 1×2
5 7
Pour accéder à des éléments dans une plage de lignes ou de colonnes, utilisez l’opérateur colon
. Par exemple, accédez aux éléments de la première à la troisième ligne et de la deuxième à la quatrième colonne de A
.
r = A(1:3,2:4)
r = 3×3
2 3 4
6 7 8
10 11 12
Une autre manière d’accéder à ces éléments est d’utiliser le mot-clé end
pour représenter la dernière colonne. Cette approche vous permet de spécifier la dernière colonne sans savoir exactement combien de colonnes compte A
.
r = A(1:3,2:end)
r = 3×3
2 3 4
6 7 8
10 11 12
Si vous souhaitez accéder à toutes les lignes ou colonnes, utilisez l’opérateur deux-points tout seul. Par exemple, renvoyez toute la troisième ligne de A
.
r = A(3,:)
r = 1×4
9 10 11 12
Vous pouvez également accéder à l’avant-dernière colonne de A
en utilisant l’opérateur deux-points et le mot-clé end
.
r = A(:,end-1)
r = 4×1
3
7
11
15
En général, vous pouvez utiliser l’indexation pour accéder aux éléments de n’importe quel tableau dans MATLAB, indépendamment du type ou des dimensions de leurs données. Par exemple, accédez directement à une colonne d’un tableau datetime
.
t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2×5 datetime
01-Jan-2018 01-Feb-2018 01-Mar-2018 01-Apr-2018 01-May-2018
01-Jan-2019 01-Feb-2019 01-Mar-2019 01-Apr-2019 01-May-2019
march1 = t(:,3)
march1 = 2×1 datetime
01-Mar-2018
01-Mar-2019
Pour les tableaux de dimension supérieure, étendez la syntaxe pour qu’elle corresponde aux dimensions du tableau. Prenez un tableau numérique aléatoire de 3 par 3 par 3. Accédez à l’élément de la deuxième ligne, troisième colonne et première feuille du tableau.
A = rand(3,3,3); e = A(2,3,1)
e = 0.5469
Pour plus d’informations sur l’utilisation de tableaux multidimensionnels, consultez Tableaux multidimensionnels.
Indexation avec index unique
Une autre approche pour accéder aux éléments d’un tableau est de n’utiliser qu’un index unique, indépendamment de la taille ou des dimensions du tableau. Cette approche est appelée indexation linéaire. Bien que MATLAB affiche les tableaux en fonction de leur taille et de leur forme définies, les tableaux sont en fait stockés dans la mémoire colonne par colonne, en partant de la gauche vers la droite. Une matrice permet de bien visualiser ce concept. Bien que le tableau suivant soit affiché en tant que matrice de 3 par 3, MATLAB le stocke en tant que colonne unique composée des colonnes de A
mises les unes à la suite des autres. Le vecteur stocké contient la séquence d’éléments 12
, 45
, 33
, 36
, 29
, 25
, 91
, 48
, 11
, et peut être affiché en utilisant un seul deux-points.
A = [12 36 91; 45 29 48; 33 25 11]
A = 3×3
12 36 91
45 29 48
33 25 11
Alinear = A(:)
Alinear = 9×1
12
45
33
36
29
25
91
48
11
Par exemple, l’élément 3,2 de A
est 25
et vous pouvez y accéder en utilisant la syntaxe A(3,2)
. Vous pouvez également accéder à cet élément en utilisant la syntaxe A(6)
, puisque 25
est le sixième élément de la séquence du vecteur stockée.
e = A(3,2)
e = 25
elinear = A(6)
elinear = 25
Bien que l’indexation linéaire puisse être moins intuitive visuellement, elle peut être puissante pour effectuer certains calculs qui ne dépendent pas de la taille ni de la forme du tableau. Par exemple, vous pouvez facilement additionner tous les éléments de A
sans avoir à fournir de deuxième argument à la fonction sum
.
s = sum(A(:))
s = 330
Les fonctions sub2ind
et ind2sub
aident à convertir entre les indices de tableau originaux et leur version linéaire. Par exemple, calculez l’index linéaire de l’élément 3,2 de A
.
linearidx = sub2ind(size(A),3,2)
linearidx = 6
Reconvertissez l’index linéaire sous la forme ligne et colonne.
[row,col] = ind2sub(size(A),6)
row = 3
col = 2
Indexation avec valeurs logiques
Utiliser des indicateurs vrai et faux est une autre approche utile d’indexation dans des tableaux, notamment lors de l’utilisation d’instructions conditionnelles. Par exemple, supposons que vous souhaitez savoir si les éléments d’une matrice A
sont inférieurs aux éléments correspondants d’une autre matrice B
. L’opérateur « inférieur à » renvoie un tableau logique dont les éléments sont 1
là où un élément de A
est inférieur à l’élément correspondant de B
.
A = [1 2 6; 4 3 6]
A = 2×3
1 2 6
4 3 6
B = [0 3 7; 3 7 5]
B = 2×3
0 3 7
3 7 5
ind = A < B
ind = 2×3 logical array
0 1 1
0 1 0
Maintenant que vous connaissez les emplacements des éléments qui remplissent la condition, vous pouvez inspecter les valeurs individuelles en utilisant ind
en tant que tableau d’index. MATLAB associe les emplacements de la valeur 1 de ind
aux éléments correspondants de A
et B
, et répertorie leurs valeurs dans un vecteur colonne.
Avals = A(ind)
Avals = 3×1
2
3
6
Bvals = B(ind)
Bvals = 3×1
3
7
7
Les fonctions « is
» MATLAB renvoient également des tableaux logiques qui indiquent quels éléments de l’entrée remplissent une certaine condition. Par exemple, vérifiez quels éléments d’un vecteur de chaînes de caractères sont manquants à l’aide de la fonction ismissing
.
str = ["A" "B" missing "D" "E" missing]; ind = ismissing(str)
ind = 1×6 logical array
0 0 1 0 0 1
Supposons que vous souhaitez trouver les valeurs des éléments non manquants. Utilisez l’opérateur ~
avec le vecteur d’index ind
pour le faire.
strvals = str(~ind)
strvals = 1×4 string
"A" "B" "D" "E"
Pour d’autres exemples d’utilisation de l’indexation logique, consultez Rechercher des éléments de tableau qui remplissent certaines conditions.
Indexation mixte avec valeurs logiques et positions des éléments
Vous pouvez également utiliser une combinaison d’indexations positionnelles et logiques pour accéder aux éléments d’un tableau.
Par exemple, créez un tableau de 5 par 5.
A = magic(5)
A = 5×5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Supposons que vous souhaitez sélectionner les éléments de A situés dans les lignes à indices en nombres premiers et dans les colonnes à indices 2, 3 et 4.
Pour ce faire, créez un vecteur B
représentant les indices des lignes de A
.
B = (1:size(A,1))
B = 1×5
1 2 3 4 5
Utilisez la fonction isprime
pour déterminer quels éléments de B
sont des nombres premiers. Le résultat est un tableau logique que vous pouvez utiliser pour indexer dans les lignes de A
.
rows = isprime(B)
rows = 1×5 logical array
0 1 1 0 1
Ensuite, définissez les colonnes que vous souhaitez sélectionner, situées aux emplacements allant de 2 à 4.
cols = 2:4
cols = 1×3
2 3 4
Utilisez l’indexation logique pour sélectionner les lignes de A
situées aux emplacements en nombres premiers, tel que défini par rows
. Ensuite, utilisez l’indexation par position pour sélectionner les colonnes de A
allant des emplacements 2 à 4, tel que défini par cols
.
A(rows,cols)
ans = 3×3
5 7 14
6 13 20
18 25 2
Voir aussi
Rubriques
- Access Data Using Categorical Arrays
- Access Data in Tables
- Structure Arrays
- Access Data in Cell Array
- Indexed Assignment
- Detailed Rules for Array Indexing