Borrar filtros
Borrar filtros

Basic question about initializing variables

4 visualizaciones (últimos 30 días)
Ahmed Hossam
Ahmed Hossam el 20 de Abr. de 2017
Editada: Ahmed Hossam el 20 de Abr. de 2017
What's the difference between
a = [ 1 2 3 ];
and
a = zeros(1,3);
a = [ 1 2 3 ];
Performance? Logic? I'm just interested to know. Thanks for your help!

Respuesta aceptada

Jan
Jan el 20 de Abr. de 2017
In
a = zeros(1,3);
a = [ 1 2 3 ];
Matlab reserves memory for 3 doubles and fills then with zeros in the first line. In the second line this memory is freed and a new vector is created. This needs about the double work compared to creating [1, 2, 3] directly and in consequence is a waste of time only.
This is not a pre-allocation. A pre-allocation would mean, that the reserved memory is re-used later:
a = zeros(1, 3);
a(1) = 1;
a(2) = 2;
a(3) = 3;
or
a = zeros(1, 3);
a(:) = 1:3;
The "(:)" is essential here, because it tells Matlab to overwrite the contents of the formerly existing memory.
  6 comentarios
Ahmed Hossam
Ahmed Hossam el 20 de Abr. de 2017
Thank you for your help
Ahmed Hossam
Ahmed Hossam el 20 de Abr. de 2017
Editada: Ahmed Hossam el 20 de Abr. de 2017
@ Stephen Cobeldick:
Ok, I understand both topics now.
First topic:
Just deklare and initialize a variable in one line! (beautiful feature!!)
Second topic:
Don't extend the memory of a variable in a loop!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Performance and Memory en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by