変数名の一部をリストから抽出できないです
22 views (last 30 days)
Show older comments
list = ["a", "b"];
X = [1 2 3 4 5 6 ];
strcat("TF_", list(1,1)) = cumsum(X);
と言うように変数名の一部をlist(string型)から取り出して使いたいのですが、string型は変数に設定できないので、以下のコードを試しました。
str2num(strcat("TF_", list(1,1)))= cumsum(X)
これでも同じく「string型の値をインデックスとして使用できません。」となってしまいます。どうすればできるようになるでしょうか?
0 Comments
Accepted Answer
Atsushi Ueno
on 6 Jul 2021
list = ['a', 'b'];
X = [1 2 3 4 5 6 ];
eval(['TF_' list(1,1) '= cumsum(X);']);
のようにchar型文字とeval関数を使えば実現しますが、これは推奨されない方法です。英語で同じ質問をしたら、百戦錬磨のMATLABフリーク各位から電光石火のスピードで「プログラム内で動的な名前を作るんじゃない!!!」と怒られます。
関数 eval の代替方法 - MATLAB & Simulink - MathWorks 日本 :最初にあるセル配列を用いる例です
numArrays = 6;
TF = cell(numArrays,1);
for n = 1:numArrays
TF{n} = cumsum(X);
end
4 Comments
Atsushi Ueno
on 6 Jul 2021
目下の課題(TF_aやTF_b等の名前を繰り返し処理で作成する)の達成の為ならevalを使えば良いかもしれませんが、引き続きプログラム中でTF_aやTF_b等の名前を使うにはやはりevalを使う必要があり、eval縛りから抜け出せなくなります。また、実行速度の低下、可読性の低下、デバッグのし難さなど欠点を上げればキリが有りません。マクロの多用と似ていて、他の言語でも同じ事が言えます。
More Answers (0)
See Also
Categories
Find more on イメージ算術 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!