using vertcat to convert a number of variables in the workspace into a column vector

3 visualizaciones (últimos 30 días)
Hi,
I have a number of variables in my workspace that I believe are arrays, each contain just one single value, and I am trying to organise them into a single column vector.
However when i try to use the vertcat function I am faced with a problem. The variables in my workspace are called P1,P2,P3,P3,....,P1650 and when I use the function: vertcat(P1:P1650) it just produces a 1 x 0 empty double row vector. But when I type in individual variables e.g. vertcat(P1,P2,P3,P4,P5,P6,P7,etc) it concatenates them as I would like.
Does anyone know what I am doing wrong here?
many thanks!
  1 comentario
Stephen23
Stephen23 el 12 de Feb. de 2017
Editada: Stephen23 el 13 de Feb. de 2017
"The variables in my workspace are called P1,P2,P3,P3,....,P1650"
How did they get there? Although there are hack-fixes using eval to resolve the bad idea of having lots of numbered variables, the best solution is to avoid this whole problem altogether, e.g. if you simply load into a structure.
"Does anyone know what I am doing wrong here?": acessing variable names dynamically will be slow, buggy, obfuscated code. You should read this:

Iniciar sesión para comentar.

Respuestas (1)

Star Strider
Star Strider el 12 de Feb. de 2017
You have a problem that you didn’t create, know as ‘dynamically named variables’. I don’t know from your description if they are arrays or single values. The eval function can put things back to rights and create your vertically-concatenated array:
For single values
[P1,P2,P3,P4,P5] = deal(1,2,3,4,5); % Assign Variables
for k1 = 1:5
C(k1,:) = eval(sprintf('P%d', k1)); % Create Column Vector
end
For arrays of possibly different sizes
for k1 = 1:5
C{k1,:} = eval(sprintf('P%d', k1)); % Vertically-Concatenated Cell Array
end

Categorías

Más información sobre Logical 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