Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

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éricos

  • strings para arreglos de cadenas

  • cell para arreglos de celdas

  • table 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

Más acerca de