En resumen: array célula es una heterogénea contenedor, matriz regular es homogénea. Esto significa que en una matriz regular todos los elementos son del mismo tipo, mientras que en la matriz de celdas, pueden ser diferentes. Puede leer más sobre la matriz de celdas here.
Uso serie de células cuando:
- Tienes diferentes tipos en la matriz
- no está seguro de si en el futuro es posible extenderla a otros tipos
- Se está trabajando con objetos que tienen un patrón de herencia
- Está trabajando con una matriz de cadenas - casi en cualquier ocasión es preferible char (n, m)
- usted tiene una gran variedad, y que a menudo actualizar un solo elemento en una función - Debido a Matlabs copia en escritura política
- Usted está trabajando con asas de función (como se explica @Pursuit)
Prefiero matriz regular cuando:
- Todos los elementos tienen el mismo tipo
- está actualizando toda la matriz de una sola vez - como Operaciones matemáticas.
- Usted quiere tener la seguridad de tipos
- Usted no va a cambiar el tipo de datos de la matriz en el futuro
- Se está trabajando con matrices matemáticas.
- Se está trabajando con objetos que no tienen herencia
Más explicación sobre copia en escritura:
Cuando se pasa una matriz a una función, un puntero/referencia es pasado.
function foo(x)
disp(x);
end
x= [1 2 3 4 5];
foo(x); %No copy is done here! A pointer is passed.
Pero cuando lo cambie (o una parte), se creará una copia.
function foo(x)
x(4) = x(4) + 1;
end
x= [1 2 3 4 5];
foo(x); %x is being copied! At least twice memory amount is needed.
En una matriz celular, solamente la célula se copia.
function foo(x)
x{4} = x{4} + 1;
end
x= {1 2 3 4 5}; %Only x{4} will be copied
Por lo tanto, si se llama a una función que cambia un solo elemento en una amplia gama, que está haciendo una gran cantidad de copias - que hace que sea más lenta. Pero en una matriz de celdas, no es el caso.
Podría estar relacionado - http://stackoverflow.com/questions/9055015/difference-between-accessing-cell-elements-using-and-curly-or-normal-brac/9055336#9055336 –