2013-04-19 1 views
15

から名前の変数を作成しますのは、私は次のようになります10個の変数を作成したいと仮定しましょう:これは私がしようとしています何の簡易版である文字列

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

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

+3

MATLAB FAQ:[変数A1、A2、...、A10をループで作成する方法は?](http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop .3F) – Amro

答えて

28

あなたはevalでそれを行うことができますが、あなたが本当にない

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

むしろセル配列を使用する必要があります

x{i} = i 
+0

とても感謝しています。そして、はい、私はセルを使用しますが、ここで紹介したこのメソッドも使用します;) – Cat

+12

evalを使用してワークスペース内のインクリメンタル変数をポップすることを本当にお勧めします。名前をつけたい場合は構造体を作成してください: 's(sprintf( 'x%d'、i))= i;' – Oleg

+0

なぜこれはお勧めしませんか? –

5

を私は強くセル配列またはそのようなのための構造体を使用して助言しますケース。私はそれがあなたにいくらかのパフォーマンス向上を与えるだろうと思う。

本当にそうする必要がある場合、ダンはどのように指示しましたか。しかし、genvarnameの機能も指摘したいと思います。文字列が有効な変数名であることを確認します。

EDIT:関数genvarnameは、コアMathWorks社のMATLABの一部ではなく、統計ツールボックスの

+0

ありがとうございました。私はセルの代わりに配列を使います。私の質問の例は、私が探している情報の簡単な質問をするために非常に単純だった。私が実際にやっていることは私の質問と同じくらい素朴ではありません:p – Cat

+0

@bdecaf:btw 'genvarname'はコアの一部ですMATLAB – Amro

+0

ああ、私の悪いです。私はそれがそのツールボックスの一部であると断言できました。 – bdecaf

1

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

私の質問は、すでに間違っを含ま

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

それは私のせいです。

+3

今後、このような小さな間違いがあれば、実際に私の回答を編集することができます。下部に編集リンクがあります。評判が十分でない場合は、コメントを残しておけば、他の誰かがあなたのために編集を行います。私は今、私のことを固定しました;) – Dan

0

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

とにかく、私にとってそれは長年の懸案であるが、これは、最高の

assignin('base',['string' 'parts'],values); 
4
for k=1:10 
    assignin('base', ['x' num2str(k)], k) 
end 
+0

は、 'base'を 'caller'に変更することを提案しています。そうすれば、誰かがワークスペースに特別な注意を払っていない場所であれば、どこでも働くはずです。 – Flyto

1

を働いていた私は別の答えを追加したいjusted。

関数関数genvarnameはこれらの例

、あなたがtmpの構造体配列とそれを使用している場合、あなたはそれをhttp://www.mathworks.co.uk/help/matlab/ref/genvarname.html

を行うにする方法は、このリンクから

例4 CMDにevalを必要としないため、正確です

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

すべての最高

エヤル

関連する問題