L'idée d'un index linéaire pour les tableaux dans MATLAB est importante. Un tableau dans MATLAB n'est en fait qu'un vecteur d'éléments, disposés en mémoire. MATLAB vous permet d'utiliser soit un index de ligne et de colonne, soit un index linéaire unique. Par exemple,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Nous pouvons voir l'ordre dans lequel les éléments sont stockés en mémoire en déroulant le tableau en un vecteur.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Comme vous pouvez le voir, le 8ème élément est le nombre 7. En fait, la fonction find renvoie ses résultats sous la forme d'un indice linéaire.
find(A>6)
ans =
1
6
8
Le résultat est que nous pouvons accéder à chaque élément tour à tour d'un tableau général n-d en utilisant une seule boucle. Par exemple, si l'on veut mettre au carré les éléments de A (oui, je sais qu'il y a de meilleures façons de faire), on peut faire ceci :
B = zeros(size(A));
for i = 1:numel(A)
B(i) = A(i).^2;
end
B
B =
64 1 36
9 25 49
16 81 4
Il existe de nombreuses circonstances où l'indice linéaire est plus utile. La conversion entre l'indice linéaire et les indices à deux (ou plus) dimensions est accomplie avec les fonctions sub2ind et ind2sub.
L'index linéaire s'applique en général à n'importe quel tableau dans Matlab. Vous pouvez donc l'utiliser sur des structures, des tableaux de cellules, etc. Le seul problème avec l'index linéaire est lorsqu'ils deviennent trop grands. MATLAB utilise un entier de 32 bits pour stocker ces index. Donc si votre tableau contient plus de 2^32 éléments au total, l'index linéaire échouera. Ce n'est vraiment un problème que si vous utilisez souvent des matrices éparses, où occasionnellement cela peut poser un problème. (Bien que je n'utilise pas une version 64 bits de MATLAB, je pense que ce problème a été résolu pour les personnes chanceuses qui le font).
13 votes
Note sur la terminologie Matlab : Matlab possède un petit nombre de types de données de base. Les plus importants sont : struct, matrix et cell array. Pour faire référence aux parties d'une matrice, il est courant d'utiliser le terme "élément", et de réserver le terme "cellule" aux parties d'un tableau de cellules. Les tableaux de cellules et les matrices présentent de nombreuses différences syntaxiques et sémantiques, même s'il s'agit de structures de données à N dimensions.
3 votes
Puis-je vous demander à quoi sert l'itération ? Peut-être y a-t-il une façon "vectorisée" de le faire à la place...