変数名の一部をリストから抽出できないです
26 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
Atsushi Ueno
am 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 Kommentare
Atsushi Ueno
am 6 Jul. 2021
目下の課題(TF_aやTF_b等の名前を繰り返し処理で作成する)の達成の為ならevalを使えば良いかもしれませんが、引き続きプログラム中でTF_aやTF_b等の名前を使うにはやはりevalを使う必要があり、eval縛りから抜け出せなくなります。また、実行速度の低下、可読性の低下、デバッグのし難さなど欠点を上げればキリが有りません。マクロの多用と似ていて、他の言語でも同じ事が言えます。
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!