How to use variable names/strings in a For cycle
古いコメントを表示
Hi,
I have the following code:
B1=matrix(:,1)
B2=matrix(:,2)
B3=matrix(:,3)
B4=matrix(:,4)
B5=matrix(:,5)
I would like to replace the 5 lines of code above by a "For" cycle.
However, I get an error when I try to compile the following code:
For i=1:5
"B"+i=i
end
The error is:
Incorrect use of '=' operator. Assign a value to a variable using '=' and compare values for equality using '=='.
How can I define variable names/strings correctly?
I thank you in advance,
Best regards,
1 件のコメント
"How can I define variable names/strings correctly?"
Dynamically naming variables is one way that beginners force themselves into writing slow, complex, inefficient, obfuscated code that is buggy and difficult to debug. Here are some reasons why:
The simple and efficient MATLAB approach is to use indexing. Is there a particular reason why you cannot use indexing?
Here is simpler, much more efficient code that actually works (unlike your code):
for k = 1:5
vec = matrix(:,k);
end
採用された回答
その他の回答 (2 件)
Here is how you can do it:
matrix = magic(5);
for i = 1:5
eval(['B' num2str(i) '=matrix(:,' num2str(i) ');']);
end
whos()
Here is why you shouldn't do it: https://www.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval
Here is what you should do instead:
clear variables
matrix = magic(5);
B = cell(1,size(matrix,2));
for i = 1:5
B{i} = matrix(:,i);
end
whos()
celldisp(B)
Or:
clear variables
matrix = magic(5);
B = num2cell(matrix,1);
whos()
celldisp(B)
Image Analyst
2022 年 1 月 26 日
0 投票
See the FAQ for why that is a horrible idea:
カテゴリ
ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!