tutorial programar programacion matriz libro identidad español comandos aprender matlab matrix

programar - ¿Cuál es la diferencia entre célula y matriz en Matlab?



matriz identidad en matlab (1)

¿Cuál es la diferencia entre la celda (es decir, con { } ) y la matriz (es decir, con [ ] ) en Matlab?


Hay varias diferencias entre una matriz de células y una matriz en MATLAB:

  • Una matriz de celdas puede contener cualquier tipo de elemento arbitrario en cada celda; mientras que una matriz requiere que los tipos de sus elementos sean homogéneos, es decir, del mismo tipo.

  • En lo que respecta al diseño de memoria, todos los elementos de una matriz se disponen contiguamente en la memoria, mientras que una matriz de celdas contiene punteros a cada elemento de la matriz. Esto puede ser importante cuando se consideran cosas como la localidad de caché para código de alto rendimiento.

  • La otra cara del punto 2 es que cuando cambia el tamaño de una matriz, todos los elementos de la matriz deben copiarse en el área de memoria recientemente asignada, pero en el caso de una matriz de celdas, solo se debe copiar una lista de punteros. Dependiendo del tamaño y tipo de elementos que almacene, esto puede significar que los arreglos de celdas son mucho más rápidos de cambiar de tamaño.

Para ilustrar las diferencias en el diseño de la memoria, consideremos un ejemplo simple:

A = [10 20 30 40];

Aquí MATLAB crea una nueva variable de matriz llamada A, asigna suficiente memoria para contener 4 dobles (32 bytes, suponiendo 8 bytes de dobles) y asigna esta memoria a un puntero que apunta a la parte real de A. (Si crea una matriz de complejos números, la memoria también se asigna para la parte imaginaria , y un puntero separado apunta a esta área de memoria).

Ahora vamos a crear una matriz de celdas que contenga estos elementos:

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

Cuando MATLAB ejecuta la primera instrucción, crea una matriz de celdas que contiene 4 punteros, cada uno de los cuales puede apuntar a un tipo arbitrario. Entonces B ya está usando 16 bytes (suponiendo punteros de 32 bits). La siguiente línea crea una matriz de 1x1 que contiene el valor 10 y la asigna al primer elemento de la matriz de celdas. El proceso aquí es similar al que describí anteriormente para la creación de una matriz de 1x4, excepto que la memoria asignada es solo lo suficientemente grande como para contener una doble (8 bytes). Esto se repite para cada una de las 3 declaraciones restantes. Por lo tanto, al mínimo, el segundo ejemplo usa 16 + 8 x 4 = 48 bytes.

Tenga en cuenta que cada variable en MATLAB también incluye una sobrecarga de memoria para una estructura llamada mxArray que almacena información como dimensión, tipo de datos y mucho más sobre esa variable. He ignorado esta sobrecarga en aras de la simplicidad.