Quelle est la différence entre la cellule et la matrice dans Matlab?

Quelle est la différence entre la cellule (c'est à dire avec { }) et de la matrice (c'est à dire avec [ ]) dans Matlab?

26
demandé sur nbro 2012-10-21 22:41:17

1 réponses

Il existe plusieurs différences entre un tableau de cellules et une matrice dans MATLAB:

  • Un tableau de cellules peut contenir n'importe quel type arbitraire d'élément dans chaque cellule; tandis qu'une matrice exige que les types de ses éléments soient homogènes, c'est-à-dire du même type.

  • En ce qui concerne la disposition de la mémoire, tous les éléments d'une matrice sont disposés de manière contiguë en mémoire, tandis qu'un tableau de cellules contient des pointeurs vers chaque élément du tableau. Cela peut être important lorsque l'on considère des choses comme localité de cache pour le code haute performance.

  • Le revers du point 2 est que lorsque vous redimensionnez une matrice, chaque élément de la matrice doit être copié dans la zone de mémoire nouvellement allouée, mais dans le cas d'un tableau de cellules, seule une liste de pointeurs doit être copiée. Selon la taille et le type d'éléments que vous stockez, cela peut signifier que les tableaux de cellules sont beaucoup plus rapides à redimensionner.


Pour illustrer les différences dans la disposition de la mémoire, considérons un simple exemple:

A = [10 20 30 40];

Ici MATLAB crée une nouvelle variable matricielle nommée A, alloue suffisamment de mémoire pour contenir 4 doubles (32 octets, en supposant des doubles de 8 octets) et assigne cette mémoire à un pointeur qui pointe vers la partie réelle de A. (Si vous créez une matrice de nombres complexes, la mémoire est allouée pour la partie imaginaire également, et un pointeur séparé pointe vers cette zone de mémoire).

Maintenant, nous allons créer un tableau de cellules qui contient ces éléments:

B = cell(1, 4);
B{1,1} = 10;
B{1,2} = 20;
B{1,3} = 30;
B{1,4} = 40;

Quand MATLAB exécute la première instruction, il crée un tableau de cellules qui contient 4 pointeurs, dont chacun peut pointer vers un type arbitraire. Donc B utilise déjà 16 octets (en supposant des pointeurs 32 bits). La ligne suivante crée une matrice 1x1 contenant la valeur 10 et l'affecte au premier élément de tableau de cellules. Le processus ici est similaire à celui que j'ai décrit ci-dessus pour la création d'une matrice 1x4, sauf que la mémoire allouée est seulement assez grande pour contenir un double (8 octets). Ceci est répété pour chacun des les 3 déclarations restantes. Donc, au minimum, le deuxième exemple utilise 16 + 8 x 4 = 48 octets.

Notez que chaque variable dans MATLAB inclut également une surcharge de mémoire pour une structure appelée mxArray {[25] } qui stocke des informations telles que la dimension, le type de données et beaucoup plus sur cette variable. J'ai ignoré ces frais généraux par souci de simplicité.

30
répondu Praetorian 2012-10-21 19:25:23