Utilisation des tableaux dans des boucles imbriquées

Soit un tableau A avec deux dimensions. Il est classiquement possible d'accéder à son contenu par la syntaxe A(i,j), où i et j représentent les indices de ligne et de colonne. Dans la réalité, les éléments de la matrice sont stockés les uns après les autres, colonne après colonne. Dans l'exemple suivant, on montre comment accéder au même élément en utilisant les indices de ligne et de colonne ou bien l'indice de stockage, appelé index par la suite :

1
2
3
>> A = magic(10) ;
>> x = A(2,2) ;
>> y = A(12) ;

En raison de ce mode de stockage, il est préférable dans le cas de boucles imbriquées, que l'indice de la boucle la plus interne corresponde à l'indice de ligne, c'est-à-dire que les opérations aient lieu sur les éléments dans l'ordre où ils sont stockés.

Exemple

Prenons par exemple cette imbrication :

1
2
3
4
5
6
7
8
9
clear all ;
X=magic(2000) ;
tic;
    for iLigne = 1 : length(X)
        for iColonne = 1 : length(X)
            d(iLigne,iColonne) =sqrt(X(iLigne,iColonne)*X(iLigne,iColonne-1)) ;
        end
    end
toc

L'imbrication suivante est plus rapide que la première :

1
2
3
4
5
6
7
8
9
clear all ;
X=magic(2000) ;
tic;
    for iColonne = 1 : length(X)
        for iLigne = 1 : length(X)
            d(iLigne,iColonne) =sqrt(X(iLigne,iColonne)*X(iLigne,iColonne-1)) ;
        end
    end
toc