変数名の一部をリストから抽出できないです

조회 수: 24 (최근 30일)
悠真 松本
悠真 松本 2021년 7월 6일
댓글: 悠真 松本 2021년 7월 7일
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型の値をインデックスとして使用できません。」となってしまいます。どうすればできるようになるでしょうか?

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 7월 6일
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
Atsushi Ueno
Atsushi Ueno 2021년 7월 6일
目下の課題(TF_aやTF_b等の名前を繰り返し処理で作成する)の達成の為ならevalを使えば良いかもしれませんが、引き続きプログラム中でTF_aやTF_b等の名前を使うにはやはりevalを使う必要があり、eval縛りから抜け出せなくなります。また、実行速度の低下、可読性の低下、デバッグのし難さなど欠点を上げればキリが有りません。マクロの多用と似ていて、他の言語でも同じ事が言えます。
悠真 松本
悠真 松本 2021년 7월 7일
なるほど、そういうことでしたか。今後何のプログラムを書くにしても気を付けます。ありがとうございます。

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

추가 답변 (0개)

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!