Un tableau de cellules (cell array) est un type de données avec des conteneurs de données indexés appelés cellules. Chaque cellule peut contenir n’importe quel type de données.

Les tableaux de cellules contiennent généralement des chaînes de caractères, des combinaisons de chaines de caractères et de nombres ou des tableaux numériques de tailles différentes.

 

Création d’un tableau de cellules

Pour créer un tableau de cellules, il y a deux (2) méthodes :

  • soit à l’aide de l’opérateur « {} » ;
  • ou en utilisant la fonction « cell ».

 

A l’aide des accolades « {} » :

>> ExempleCell = {1, 2, 3; 'text', rand(5,10,2), {11; 22; 33}}

ExempleCell =
    [   1]    [            2]    [       3]
    'text'    [5x10x2 double]    {3x1 cell}

 

A l’aide de la fonction « cell » :

>> ExempleCell = cell(3,2)

ExempleCell =
    []    []
    []    []
    []    []

 

Accès aux données d’un tableau de cellules

Il existe deux moyens pour accéder aux éléments d’un tableau de cellules:

  •  soit avec « () » pour récupérer des ensembles de cellules;
  • soit avec « {} » pour récupérer la valeur contenue dans la cellule.

 

Indexation de cellules avec des parenthèses « () » :

>> C = {'one', 'two', 'three';
        1, 2, 3};

>> D = C(1:2, 1:2)

D =
    'one'    'two'
    [  1]    [  2]

 

On peut également modifier le contenu du tableau de cellules à l’aide des parenthèses « () » :

>> C(1, 1:3) = {'premier', 'deuxieme','troisieme'}

C =
    'premier'    'deuxieme'    'troisieme'
    [      1]    [       2]    [        3]

 

Indexation de contenu avec les accolades « {} » :

>> C = {'one', 'two', 'three';
        1, 2, 3};

>> C{2,3}
ans =
     3

 

On peut également modifier le contenu du tableau de cellules à l’aide des accolades « {} » :

>> C{2,3} = 1000

C =
    'one'    'two'    'three'
    [  1]    [  2]    [ 1000]

 

Lorsque vous accédez au contenu de plusieurs cellules comme ceci C {1: 2,1: 2}, il faut crée une liste séparée par des virgules. Parce que chaque cellule peut contenir un type différent de données, vous ne pouvez pas affecter cette liste à une seule variable. Toutefois, vous pouvez affecter la liste au même nombre de variables que les cellules. MATLAB attribue aux variables l’ordre des colonnes.

>> [r1c1, r2c1, r1c2, r2c2] = C{1:2,1:2}

r1c1 =
one
r2c1 =
     1
r1c2 =
two
r2c2 =
     2

 

Si chaque cellule contient le même type de données, vous pouvez créer une variable unique en appliquant l’opérateur de concaténation de tableau, « [] », à la liste séparée par des virgules.

>> nums = [C{2,:}]

nums =
           1           2        1000

 

Indexation des éléments des cellules

Pour accéder à un élément dans une cellule d’un tableau de cellules, il faut d’abord accéder à la cellule par les « {} », puis d’accéder à l’élément de cette cellule par ces coordonnées en utilisant les « () ».

>> ExempleCell = {1, 2, 3; 'exemple', rand(8,4,3), {11; 22; 33}}

ExempleCell =
    [      1]    [           2]    [       3]
    'exemple'    [8x4x3 double]    {3x1 cell}

>> ExempleCell{6}

ans =
    [11]
    [22]
    [33]

>> ExempleCell{6}(1,1)

ans =
    [11]

 

Ajouter des cellules à un tableau de cellules

Pour ajouter des cellules à un tableau de cellules, il suffit d’assigner des données à une cellule qui se situe hors des dimensions du tableau de cellules actuel.

>> ExempleCell = {1, 2, 3}

ExempleCell =
    [1]    [2]    [3]

>> ExempleCell{4,4} = []

ExempleCell =
    [1]    [2]    [3]    []
     []     []     []    []
     []     []     []    []
     []     []     []    []

>> ExempleCell{4,4} = 2000

ExempleCell =
    [1]    [2]    [3]        []
     []     []     []        []
     []     []     []        []
     []     []     []    [2000]

 

Supprimer des données d’un tableau de cellules

Pour supprimer un contenu d’une cellule dans le tableau de cellules, il faut assigner une matrice vide à la cellule en question.

>> C = {1, 2, 3; 4, 5, 6; 7, 8, 9}

C =
    [1]    [2]    [3]
    [4]    [5]    [6]
    [7]    [8]    [9]

>> C{2,2} = []

C =
    [1]    [2]    [3]
    [4]     []    [6]
    [7]    [8]    [9]

 

On peut supprimer une ligne ou une colonne en utilisant l’indexation de plusieurs cellules avec les parenthèses « () ».

>> C(:,2) = []

C =
    [1]    [3]
    [4]    [6]
    [7]    [9]

 

Concaténer des tableaux de cellules avec « [] »

Soient A et B deux tableaux de cellules tels que :

>> A = {'MATLAB'}

A =
    'MATLAB'

>> B = {rand(5)}

B =
    [5x5 double]

>> C = [A B]

C =
    'MATLAB'    [5x5 double]

 

Appliquer une fonction à chaque cellule

Il peut se révéler utile de pouvoir appliquer une même fonction sur chaque cellule.

Pour faire cela, il existe la fonction cellfun à laquelle il suffit de passer le handle de la fonction à utiliser. On pourra aussi créer une fonction anonyme de notre choix grâce au symbole @.

>> A = {[20 5 8], [15 1 99], [5 3 8], []}

A =
    [1x3 double]    [1x3 double]    [1x3 double]    []

>> cellfun(@isempty, A)

ans =
     0     0     0     1

 

Dans le cas où la sortie de la fonction utilisée sur chaque cellule renvoie autre chose qu’un scalaire, la sortie se devra d’être aussi sous forme de tableau de cellules, il faudra alors spécifier le paramètre ‘UniformOutput’ à false sous peine d’obtenir une erreur :

>> A = {[20 5 8], [15 1 99], [5 3 8], []}

A =
    [1x3 double]    [1x3 double]    [1x3 double]    []

>> cellfun(@(x) x(x>10), A)

Error using cellfun
Non-scalar in Uniform output, at index 2, output 1.
Set 'UniformOutput' to false.

>> cellfun(@(x) x(x>10), A, 'UniformOutput', false)

ans =
    [20]    [1x2 double]    [1x0 double]    []

 

Certaines fonctions telles que strcmp, strcmpi, strncmp, strncmpi, regexp, regexpi, regexprep, str2double, ou strcat peuvent être appliquées directement sur les tableaux de cellules :

>> Noms = {'Durand' , 'Dupond' , 'Martin'};
>> Prenoms = {'Jacques' , 'Jean' , 'Paul'};
>> strncmp(Noms, 'Du', 2)

ans =
     1     1     0

>> strcat(Noms, {' '}, Prenoms)

ans =
    'Durand Jacques'    'Dupond Jean'    'Martin Paul'

>> str2double({'3.141', '2.718', '1.618'})

ans =
    3.1410    2.7180    1.6180

 

Liste des fonctions

cell Permet de créer un tableau de cellules
celldisp Permet d’afficher le contenu d’un tableau de cellules
cellfun Permet d’appliquer une fonction à chaque cellule d’un tableau de cellules
cellplot Permet d’avoir un affichage graphique de la structure d’un tableau de cellules
iscell Détermine si une entrée est un tableau de cellules
cell2struct Convertir un tableau de cellules en tableau de structures
struct2cell Convertir une structure en tableau de cellules
cell2mat Convertir un tableau de cellules en tableau numérique
mat2cell Convertir un tableau numérique en tableau de cellule avec des cellules de tailles différentes
num2cell Convertir un tableau numérique en tableau de cellule avec des cellules de mêmes tailles