Un tableau à 3 dimensions est une succession, en profondeur, de matrices appelées pages.

tab_multi_dim
Exemple d’un tableau à 3 dimensions

Ce tableau possède ainsi 3 pages, chacune ayant 4 lignes et 3 colonnes.

 

Création d’un tableau

La création d’un tableau multidimensionnel en listant explicitement les éléments en une seule instruction est possible avec la fonction cat.

La création d’un tableau à 3 dimensions se fait par la concaténation selon la direction 3 de matrices de mêmes dimensions:

>> page1 = randn(4)

page1 =
    1.4193   -0.8045    0.2157    0.7223
    0.2916    0.6966   -1.1658    2.5855
    0.1978    0.8351   -1.1480   -0.6669
    1.5877   -0.2437    0.1049    0.1873

>> page2 = ones(4,4)

page2 =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

>> page3 = randn(4,4)*2

page3 =
   -0.1650    1.6808    0.6070    3.4238
   -3.8660   -1.7761   -1.2007   -0.3882
   -0.8779    0.2002    0.9799   -4.2767
   -3.5894   -1.0891    1.4787   -1.6792

>> mat = cat(3, page1, page2, page3)

mat(:,:,1) =
    1.4193   -0.8045    0.2157    0.7223
    0.2916    0.6966   -1.1658    2.5855
    0.1978    0.8351   -1.1480   -0.6669
    1.5877   -0.2437    0.1049    0.1873

mat(:,:,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

mat(:,:,3) =
   -0.1650    1.6808    0.6070    3.4238
   -3.8660   -1.7761   -1.2007   -0.3882
   -0.8779    0.2002    0.9799   -4.2767
   -3.5894   -1.0891    1.4787   -1.6792

Selon la direction 2, on réalise une concaténation horizontale.

Selon la direction 1, on réalise une concaténation verticale:

> page1 = randn(4)

page1 =
   -1.0891    1.5442   -1.0616   -0.1924
    0.0326    0.0859    2.3505    0.8886
    0.5525   -1.4916   -0.6156   -0.7648
    1.1006   -0.7423    0.7481   -1.4023

>> page2 = ones(2,4)

page2 =
     1     1     1     1
     1     1     1     1

>> page3 = randn(1,4)

page3 =
   -1.4224    0.4882   -0.1774   -0.1961

>> mat1 = cat(1, page1, page2, page3)

mat1 =
   -1.0891    1.5442   -1.0616   -0.1924
    0.0326    0.0859    2.3505    0.8886
    0.5525   -1.4916   -0.6156   -0.7648
    1.1006   -0.7423    0.7481   -1.4023
    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000
   -1.4224    0.4882   -0.1774   -0.1961

 

Dimension d’un tableau

Le nombre de dimensions d’un tableau est retourné par la fonction ndims, tandis que la valeur de chaque dimension est retournée dans un vecteur par la fonction size.

>> ndims(mat)

ans =
     3

>> size(mat)

ans =
     4     4     3

 

Manipulation des tableaux

La fonction permute

La fonction permute permute les dimensions d’un tableau afin qu’elles soient dans l’ordre précisé par un vecteur.

La fonction ipermute réalise l’opération inverse.

>> mat

mat(:,:,1) =
    1.4193   -0.8045    0.2157    0.7223
    0.2916    0.6966   -1.1658    2.5855
    0.1978    0.8351   -1.1480   -0.6669
    1.5877   -0.2437    0.1049    0.1873

mat(:,:,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

mat(:,:,3) =
   -0.1650    1.6808    0.6070    3.4238
   -3.8660   -1.7761   -1.2007   -0.3882
   -0.8779    0.2002    0.9799   -4.2767
   -3.5894   -1.0891    1.4787   -1.6792

>> permute(mat,[2,3,1])

ans(:,:,1) =
    1.4193    1.0000   -0.1650
   -0.8045    1.0000    1.6808
    0.2157    1.0000    0.6070
    0.7223    1.0000    3.4238
ans(:,:,2) =
    0.2916    1.0000   -3.8660
    0.6966    1.0000   -1.7761
   -1.1658    1.0000   -1.2007
    2.5855    1.0000   -0.3882

ans(:,:,3) =
    0.1978    1.0000   -0.8779
    0.8351    1.0000    0.2002
   -1.1480    1.0000    0.9799
   -0.6669    1.0000   -4.2767

ans(:,:,4) =
    1.5877    1.0000   -3.5894
   -0.2437    1.0000   -1.0891
    0.1049    1.0000    1.4787
    0.1873    1.0000   -1.6792

 

La fonction reshape

La fonction reshape change les dimensions d’un tableau en prenant les éléments colonne par colonne, depuis la première vers la dernière.

>> mat1

mat1 =
   -1.0891    1.5442   -1.0616   -0.1924
    0.0326    0.0859    2.3505    0.8886
    0.5525   -1.4916   -0.6156   -0.7648
    1.1006   -0.7423    0.7481   -1.4023
    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000
   -1.4224    0.4882   -0.1774   -0.1961

>> reshape(mat1, 2,7,2)

ans(:,:,1) =
   -1.0891    0.5525    1.0000   -1.4224    0.0859   -0.7423    1.0000
    0.0326    1.1006    1.0000    1.5442   -1.4916    1.0000    0.4882

ans(:,:,2) =
   -1.0616   -0.6156    1.0000   -0.1774    0.8886   -1.4023    1.0000
    2.3505    0.7481    1.0000   -0.1924   -0.7648    1.0000   -0.1961

 

La fonction squeeze

La fonction squeeze efface toutes les dimensions orphelines (=1) d’un tableau

>> mat

mat(:,:,1) =
    1.4193   -0.8045    0.2157    0.7223
    0.2916    0.6966   -1.1658    2.5855
    0.1978    0.8351   -1.1480   -0.6669
    1.5877   -0.2437    0.1049    0.1873

mat(:,:,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

mat(:,:,3) =
   -0.1650    1.6808    0.6070    3.4238
   -3.8660   -1.7761   -1.2007   -0.3882
   -0.8779    0.2002    0.9799   -4.2767
   -3.5894   -1.0891    1.4787   -1.6792

>> a = squeeze(mat(1,:,:))

a =
    1.4193    1.0000   -0.1650
   -0.8045    1.0000    1.6808
    0.2157    1.0000    0.6070
    0.7223    1.0000    3.4238

 

La fonction repmat

La fonction repmat permet de répéter une matrice.

>> repmat(a, 2, 3)

ans =
    1.4193    1.0000   -0.1650    1.4193    1.0000   -0.1650    1.4193    1.0000   -0.1650
   -0.8045    1.0000    1.6808   -0.8045    1.0000    1.6808   -0.8045    1.0000    1.6808
    0.2157    1.0000    0.6070    0.2157    1.0000    0.6070    0.2157    1.0000    0.6070
    0.7223    1.0000    3.4238    0.7223    1.0000    3.4238    0.7223    1.0000    3.4238
    1.4193    1.0000   -0.1650    1.4193    1.0000   -0.1650    1.4193    1.0000   -0.1650
   -0.8045    1.0000    1.6808   -0.8045    1.0000    1.6808   -0.8045    1.0000    1.6808
    0.2157    1.0000    0.6070    0.2157    1.0000    0.6070    0.2157    1.0000    0.6070
    0.7223    1.0000    3.4238    0.7223    1.0000    3.4238    0.7223    1.0000    3.4238

 

Indexation d’un tableau

On indexe un élément d’un tableau selon la règle :

tableau (num_ligne, num_colonne, num_page).

>> mat

mat(:,:,1) =
    1.4193   -0.8045    0.2157    0.7223
    0.2916    0.6966   -1.1658    2.5855
    0.1978    0.8351   -1.1480   -0.6669
    1.5877   -0.2437    0.1049    0.1873

mat2(:,:,2) =

     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

mat(:,:,3) =
   -0.1650    1.6808    0.6070    3.4238
   -3.8660   -1.7761   -1.2007   -0.3882
   -0.8779    0.2002    0.9799   -4.2767
   -3.5894   -1.0891    1.4787   -1.6792

>> mat(2,4,3)

ans =
   -0.3882

>> mat(2,4,1)

ans =
    2.5855

>> mat(2,2,1)

ans =
    0.6966

 

Ajout d’un scalaire

L’ajout d’un scalaire à un tableau multidimensionnel consiste à l’ajouter à tous ses éléments.

>> mat+100

ans(:,:,1) =
  101.4193   99.1955  100.2157  100.7223
  100.2916  100.6966   98.8342  102.5855
  100.1978  100.8351   98.8520   99.3331
  101.5877   99.7563  100.1049  100.1873

ans(:,:,2) =
   101   101   101   101
   101   101   101   101
   101   101   101   101
   101   101   101   101

ans(:,:,3) =
   99.8350  101.6808  100.6070  103.4238
   96.1340   98.2239   98.7993   99.6118
   99.1221  100.2002  100.9799   95.7233
   96.4106   98.9109  101.4787   98.3208