Hello, I have the following problem:
array_1 = [1 2 3];
array_2 = [4 5 6];
array_3 = [7 8 9];
array_i = [.....];
I want to use a for loop to create one matrix looking like:
matrix =
1 2 3
4 5 6
7 8 9
.....
How can I realize that? Thanks, J.

댓글 수: 3

KSSV
KSSV 2017년 6월 23일
How you have these arrays? In works pace or in text file?
Jonas K
Jonas K 2017년 6월 23일
in my workspace but both solutions would be interesting
Stephen23
Stephen23 2017년 6월 23일
편집: Stephen23 2017년 6월 23일
The most important question is: how did you get those arrays into your workspace? The best solution is to avoid creating such arrays... and luckily it is trivial to avoid when loading/importing data or when creating data. So, given that it is so trivial to avoid this problem, when not improve your code by avoiding this whole problem altogether?
About the worst solution would be to use eval (which some beginners love to use), you might like to first know what the MATLAB documentation says about it: "A frequent use of the eval function is to create sets of variables such as A1, A2, ..., An, but this approach does not use the array processing power of MATLAB and is not recommended."
You might also like to read what experienced MATLAB users say about what you are trying to do (hint: they strongly advise against it):
A much better solution is to load your data into one variable, and then simply access the data using indexing and/or fieldnames, e.g. if you use load then always load into an output variable. This will more efficient, neater, more robust, easier to check, easier to debug, faster,...

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

 채택된 답변

KSSV
KSSV 2017년 6월 23일

0 개 추천

%%create arrays
array_1 = [1 2 3];
array_2 = [4 5 6];
array_3 = [7 8 9];
array_4 = [1 2 3];
array_5 = [4 5 6];
array_6 = [7 8 9];
save myfile.mat ;
clearvars
S = load('myfile.mat') ;
names = fields(S) ;
iwant = zeros(length(names),3) ;
for i = 1:length(names)
iwant(i,:) = getfield(S,names{i}) ;
end

댓글 수: 5

Jonas K
Jonas K 2017년 6월 23일
Thanks! The save function saves ALL of my variables. I only want it to save the array_... variables. How do I select them without spelling the name of every single one?
Stephen23
Stephen23 2017년 6월 23일
" How do I select them without spelling the name of every single one"
Read the save documentation and use the -regexp option.
Guillaume
Guillaume 2017년 6월 23일
But, as Stephen commented in the question, the best solutions by far, is not to create these numbered variables in the first place.
Numbered variables are always a very good indication that you're doing something very wrong. I would focus on changing the way these are created rather than on clunky workaround such as eval or load + save (which in my opinion is just as bad as eval)
Jonas K
Jonas K 2017년 6월 23일
works like a charm! you guys rock:)
KSSV
KSSV 2017년 6월 23일
Jonas, you have to follow the Stephen comments. What he said is exactly true. This practise is not good idea.

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2017년 6월 23일

댓글:

2017년 6월 23일

Community Treasure Hunt

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

Start Hunting!

Translated by