Concatenate variables with similar names

조회 수: 6 (최근 30일)
Ricardo Duarte
Ricardo Duarte 2021년 6월 8일
편집: Ricardo Duarte 2021년 6월 8일
Dear all
I need to concatenate several variables with similar name.
For example: T=cat(3,SPL_A,SPL_B,SPL_C,SPL_D,SPL_E).
This procedure is easy when you have just a few variables, as I show you in the previous line, however in my case I have hundreds of variables which makes almost impossible to do it by hand.
The variables have all the same starting name which I guess could help in the process, but Im not realizing how to do it.
Thanks in advance
  댓글 수: 9
Ricardo Duarte
Ricardo Duarte 2021년 6월 8일
Using a loop.
KSSV
KSSV 2021년 6월 8일
So you are creating the variables. You could concatenate them while generating those variables in a loop.

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2021년 6월 8일
편집: Stephen23 2021년 6월 8일
"Using a loop."
Then that is where you should fix the bad code design.
Meta-data is data, so store it in arrays, not in variable names.
Forcing meta-data (e.g. positions, frequencies) into variable names is one way that beginners force themselves into writing slow, inefficient, complex code that is liable to bugs and yet difficult to debug:
"this procedure is easy when you have just a few variables"
It is also very easy when you have an arbitrary number of arrays. The simple and efficient solution is to keep your data in just a cell array, then you can use comma-separated lists to concatenate those arrays:
For example:
N = number of arrays.
C = cell(1,N); % preallocate!
for k = 1:N
... your code
C{k} = whatever output array you want
end
M = cat(3,C{:}); % so simple.
  댓글 수: 2
Ricardo Duarte
Ricardo Duarte 2021년 6월 8일
Thank you, but this will only concatenate the names of the variables and I want to concatenate the content of each variable.
Ricardo Duarte
Ricardo Duarte 2021년 6월 8일
편집: Ricardo Duarte 2021년 6월 8일
It works, thank you

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

SALAH ALRABEEI
SALAH ALRABEEI 2021년 6월 8일
편집: SALAH ALRABEEI 2021년 6월 8일
@Ricardo Duarte Here is a trick, you will save all your workplace into one variable b; then loop over all of them to take whose variables who have the same size ( which are those you want to concatenate ). Assuming your variables that you need to concatenate are of size 20 x 30. However, if a any variable the same size as 20 x 30 will be concatenated
b = whos;
ConMat = [];
for i = 1:length(b)
if sum(b(i).size) == sum([20,30])
ConMat=[ConMat;eval(b(i).name)];
end
end
  댓글 수: 6
SALAH ALRABEEI
SALAH ALRABEEI 2021년 6월 8일
Thank you @Stephen Cobeldick, I have just check you invaluable complete Tech report in the importance of properly naming the varaibles. I didn't expect that until I read part of it.
Regarding to my comment, I was expecting a faster way to fix the issue of @Ricardo Duarte ( where there are several variables. Thank you though.
Stephen23
Stephen23 2021년 6월 8일
편집: Stephen23 2021년 6월 8일
"It would be great if there were a function that does so easily"
The comma-separated list syntax efficiently concatenates arbitrary numbers of arrays together.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by