web-dev-qa-db-ja.com

文字列から名前を持つ変数を作成する

次のような10個の変数を作成すると仮定します。

_x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
_

これは、私がやろうとしていることの簡易版です。基本的には、これらの変数を自動化された方法で作成して、コード行を節約したいだけです。 Matlabで変数名を構築する可能性はありますか?私の例のパターンは["x", num2str(i)]です。しかし、その名前の変数を作成する方法を見つけることはできません。

17
Potaito

eval でできますが、実際にはnotする必要があります

eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended

むしろセル配列を使用します。

x{i} = i
28
Dan

また、このような場合にはセル配列または構造体を使用することを強くお勧めします。パフォーマンスがさらに向上すると思います。

本当にそうする必要がある場合、ダンはその方法を教えました。しかし、genvarname関数もポイントしたいと思います。文字列が有効な変数名であることを確認します。

編集:genvarnameはコアmatlabの一部であり、統計ツールボックスの一部ではありません

5
bdecaf
for k=1:10
   assignin('base', ['x' num2str(k)], k)
end
4
MasterJedi

それは長い間遅れているが、私はちょうど別の答えを追加したかった。

関数genvarnameはこれらの場合にぴったりです

tmp構造体配列で使用する場合、eval cmdは必要ありません

このリンクの例4は、その方法です http://www.mathworks.co.uk/help/matlab/ref/genvarname.html

 for k = 1:5
   t = clock;
   pause(uint8(Rand * 10));
   v = genvarname('time_elapsed', who);
   eval([v ' = etime(clock,t)'])
   end

ではごきげんよう

エイアル

2
eyalsoreq

他の誰かが興味を持っている場合、ダンの答えからの正しい構文は次のようになります。

eval(['x', num2str(i), ' = ', num2str(i)]);

私の質問にはすでに間違った構文が含まれていたので、それは私のせいです。

1
Potaito

シミュレーション中に構造体(または私が推測するセル配列)をワークスペースから参照できない場合、Simulinkブロックの構造体を参照できないため、このようなものが必要でした。

とにかく、私にとってはこれが最もうまくいった

assignin('base',['string' 'parts'],values);
0
Fabian Jonsson