FAQ MATLABConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 168, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireTableaux de cellules (cell array)

Un tableau de cellules (cell array) permet de stocker différent type de variables dans une seule. Il est possible de stocker n'importe quel type de variables et surtout des variables de n'importe quelles dimensions.
Par exemple :

 
Sélectionnez
x{1,1} = 10;
x{2,1} = rand(5,4,3);
x{1,2} = 'MATLAB';
x{2,2} = {'salut';'au revoir'};
x

x = 

    [          10]    'MATLAB'  
    [5x4x3 double]    {2x1 cell}
Mis à jour le 27 septembre 2012  par Rostom Zacaria

Lien : Cell Arrays :: Classes (Data Types) (MATLAB®)
Lien : Cell Arrays and Their Contents, by Loren Shure (blog)

L'indexage s'effectue :

  • soit avec () pour récupérer la cellule ;
  • soit avec {} pour récupérer la valeur contenue dans la cellule.
 
Sélectionnez
C = {rand(5) 'MATLAB'}

C = 

    [5x5 double]    'MATLAB'

>> C(1)

ans = 

    [5x5 double]

>> C{1}

ans =

    0.9797    0.1365    0.6614    0.5828    0.2259
    0.2714    0.0118    0.2844    0.4235    0.5798
    0.2523    0.8939    0.4692    0.5155    0.7604
    0.8757    0.1991    0.0648    0.3340    0.5298
    0.7373    0.2987    0.9883    0.4329    0.6405
Créé le 27 mai 2007  par Jérôme Briot

Lien : Access Data in a Cell Array

 
Sélectionnez
C = {rand(5) 'MATLAB'}

C = 

    [5x5 double]    'MATLAB'

>> C{1}

ans =

    0.2091    0.5678    0.4154    0.9708    0.2140
    0.3798    0.7942    0.3050    0.9901    0.6435
    0.7833    0.0592    0.8744    0.7889    0.3200
    0.6808    0.6029    0.0150    0.4387    0.9601
    0.4611    0.0503    0.7680    0.4983    0.7266

>> C{1}(1,1)

ans =

    0.2091

>> C{2}(1,1)

ans =

M
Créé le 27 mai 2007  par Jérôme Briot

Lien : Access Data in a Cell Array

Soient A et B deux tableaux de cellules tels que :

 
Sélectionnez
A = {rand(5)}
B = {'MATLAB'}

Alors :

 
Sélectionnez
C = {A B}

C = 

    {1x1 cell}    {1x1 cell}

C = [A B]

C = 

    [5x5 double]    'MATLAB'
Créé le 27 mai 2007  par Jérôme Briot

Dans certains cas où l'on travaille avec des tableaux de cellules, il peut se révéler utile de pouvoir appliquer une même fonction sur chaque cellule.
Pour faire cela, il existe la fonction cellfunDocumentation de 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 @ (Cf Que représente le symbole @ ?).

 
Sélectionnez
>> C = {[10 2 15],[14 5],[],[7 8 9 10 11]};
>> estVide = cellfun(@isempty,C); 

ans = 
	0 0 1 0

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 :

 
Sélectionnez
>> ge10 = cellfun(@(x) x(x>=10),C)
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.

>> ge10 = cellfun(@(x) x(x>=10),C,'UniformOutput',false)

ans = 

	[1x2 double]    [14]     []    [1x2 double]

Note : certaines fonctions telles que strcmpDocumentation de la fonction strcmp, strcmpiDocumentation de la fonction strcmpi, strncmpDocumentation de la fonction strncmp, strncmpiDocumentation de la fonction strncmpi, regexpDocumentation de la fonction regexp, regexpiDocumentation de la fonction regexpi, regexprepDocumentation de la fonction regexprep, str2doubleDocumentation de la fonction str2double, ou strcatDocumentation de la fonction strcat peuvent être appliquées directement sur les tableaux de cellules :

 
Sélectionnez
>> 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
Créé le 21 mars 2012  par Jérôme Marsaguet
  • Passage tableau de cellules → tableau numérique : fonctions cell2matDocumentation de la fonction cell2mat et catDocumentation de la fonction cat.

    Vous devez d'abord vous assurer que les cellules possèdent le même type et la même taille selon la dimension à concaténer, car si les tableaux de cellules permettent de stocker des tableaux de types et dimensions différents, ce n'est pas le cas des tableaux numériques.

     
    Sélectionnez
    >> C = {rand(3,5) , zeros(3,2) , ones(3,1)};
    
    C = 
    
        [3x5 double]    [3x2 double]    [3x1 double]
    
    >> cell2mat(C) % [3x5 3x2 3x1] => 3x8 OK 
    >> % ou cat(2, C{:})
    ans =
    
        0.7513    0.8909    0.1493    0.8143    0.1966         0         0    1.0000
        0.2551    0.9593    0.2575    0.2435    0.2511         0         0    1.0000
        0.5060    0.5472    0.8407    0.9293    0.6160         0         0    1.0000
    
    >> C = C.'
    
    ans = 
    
        [3x5 double]
        [3x2 double]
        [3x1 double]
    
    >> cell2mat(C)  % 9x? Erreur !
    ??? Error using ==> cat
    CAT arguments dimensions are not consistent.
  • Passage tableau numérique → tableau de cellules : fonctions num2cell, mat2cell et cellstr.

    • La fonction num2cellDocumentation de la fonction num2cell va mettre chaque valeur du tableau dans une cellule :

       
      Sélectionnez
      >> num2cell( rand(3,4) )
      
      ans = 
      
          [0.8687]    [0.2599]    [0.9106]    [0.1455]
          [0.0844]    [0.8001]    [0.1818]    [0.1361]
          [0.3998]    [0.4314]    [0.2638]    [0.8693]

      ou une voire plusieurs dimension(s) :

       
      Sélectionnez
      >> num2cell(rand(3,4), 2)
      
      ans = 
      
          [1x4 double]
          [1x4 double]
          [1x4 double]
      	
      >> num2cell(rand(5,4,3), [1 3])
      
      ans = 
      
          [5x1x3 double]    [5x1x3 double]    [5x1x3 double]    [5x1x3 double]
    • La fonction mat2cellDocumentation de la fonction mat2cell permettra de regrouper des valeurs au sein d'une cellule :

       
      Sélectionnez
      >> C = rand(6,9);
      mat2cell(C, [1 2 3], [4 5])
      
      ans = 
      
          [1x4 double]    [1x5 double]
          [2x4 double]    [2x5 double]
          [3x4 double]    [3x5 double]
    • La fonction cellstrDocumentation de la fonction cellstr permettra de convertir un tableau de caractères en tableau de chaînes de caractères :

       
      Sélectionnez
      >> C = strvcat('Utilisation', 'fonction', 'cellstr')
      
      C =
      
      Utilisation
      fonction   
      cellstr    
      
      >> cellstr(C)
      
      ans = 
      
          'Utilisation'
          'fonction'
          'cellstr'
Créé le 26 juin 2013  par Jérôme Marsaguet

Lien : Comment accéder à un élément particulier d'une cellule ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007-2017 Developpez LLC Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.