Preasignación
Los bucles for
y while
, que aumentan progresivamente el tamaño de una estructura de datos cada vez que pasa por el bucle, pueden afectar negativamente al rendimiento y al uso de la memoria. El reajuste repetido del tamaño de los arreglos requiere con frecuencia que MATLAB® pase más tiempo buscando bloques de memoria contiguos y, después, trasladando el arreglo a dichos bloques. A menudo, puede mejorar el tiempo de ejecución del código preasignando la cantidad máxima de espacio necesario para el arreglo.
El siguiente código muestra la cantidad de tiempo necesario para crear una variable escalar, x
, y, después, aumentar gradualmente el tamaño de x
en un bucle for
.
tic x = 0; for k = 2:1000000 x(k) = x(k-1) + 5; end toc
Elapsed time is 0.301528 seconds.
Si preasigna un bloque de memoria de 1 por 1.000.000 para x
y lo inicia en cero, el código se ejecuta mucho más rápido, porque no hace falta reasignar memoria repetidamente para la cada vez mayor estructura de datos.
tic x = zeros(1,1000000); for k = 2:1000000 x(k) = x(k-1) + 5; end toc
Elapsed time is 0.011938 seconds.
Utilice la función de preasignación correspondiente al tipo de arreglo que desee iniciar:
zeros
para arreglos numéricosstrings
para arreglos de cadenascell
para arreglos de celdastable
para arreglos de tablas
Preasignar una matriz no doble
Al preasignar un bloque de memoria para mantener una matriz de un tipo diferente a double
, evite usar el método
A = int8(zeros(100));
Esta instrucción preasigna una matriz de 100 por 100 de int8
, primero creando una matriz completa de valores double
y, después, convirtiendo cada elemento a int8
. Crear el arreglo como valores int8
ahorra tiempo y memoria. Por ejemplo:
A = zeros(100,'int8');
Ejemplos relacionados
- Remodelar y reorganizar arreglos
- Asignar memoria previamente para un arreglo de celdas
- Access Data Using Categorical Arrays
- Asignar previamente arreglos de objetos de gráficas
- Construir arreglos de objetos