2009-03-30 31 views
2

テキストファイルから変数をロードします。MATLABのテキストファイルから値を読み込み

たとえば、私のテキストファイルは、varAvarB、およびvarCです。

MATLABでは、これらの変数の値を与えて、すべての変数が2x2行列になるようにしたいと思います。

したがって、上記の情報を含むテキストファイルから、私はこのようになります行列になるだろう:

[ 1 2 3 4 5 6; 
    1 2 3 4 5 6] 

が可能これですか?

もう少し明確にするために2番目の例を追加しました。

私のテキストファイル、TEXT.TXTは、MATLABではこの

x1 x2 x3 

のように見える私の.mファイルがそう

x1 = [1 1; 1 1] 
x2 = [2 2; 2 2] 
x3 = [3 3; 3 3] 

のように、これらの変数に値を与え、私は私のテキストファイルをインポートする私は

a = (textfile) 
a = [1 1 2 2 3 3 ; 1 1 2 2 3 3] 

になるだろう、私は基本的には(0123の非常に大きな問題にgenetic algorithm(GA)を適応しよう(TSP)タイプ)。問題は、私が持っているすべての変数が行列であり、クロスオーバー、フィットネス、および突然変異のコードがかなり複雑になることです。そして私はランダムな開始集団を作るという問題も抱えています。

私は変数を30回と言いましょう。変数を1回しか選択できないように、256個のリストからランダムに選択したいと思います。しかし、各変数は、変更できない2 * 2行列に固有の値を持ちます。

私は彼らに代わりの値の変数を作成するすべての値の前に xを入れ、その後randpermを使用したいと思い

...

+0

テキストファイルには変数名のみが格納されますか、またはそれらの変数に割り当てられるデータも格納されますか? – gnovice

+0

これは非常に混乱し複雑な問題のようです。大規模なアプリケーションについて詳しく説明できますか?これはすべてこれが使用されていますか?私は、おそらく.matファイルを使用するなど、ファイルから変数名を読み取るよりも、あなたの問題を処理する方がはるかに簡単な方法があるかもしれないと感じています。 – gnovice

答えて

6

テキストファイル内のデータは、この(スペースで区切られた文字列)のように見える場合:

x1 x2 x3 ... 

あなたがそうのようなTEXTSCANを使用してセル配列に文字列を読むことができます:

fid = fopen('file.txt','r'); 
A = textscan(fid,'%s'); 
fclose(fid); 
A = A{:}; 

は、文字列をセル配列に格納します。{'x1'; 'x2'; 'x3'; ...}。さて、これらの文字列の1のうち、変数を作成し、それに値を割り当てるために、私はASSIGNIN使用します。

assignin('base',A{1},[1 2; 1 2]); 

これは、ベースワークスペース内の変数X1を作成し、これに値を代入[1 2; 1 2]。最初の引数は、MATLABベースワークスペースまたは呼び出し元関数のワークスペースのいずれかに変数を作成するための 'base'または 'caller'のいずれかです。 Aの各文字列名に対してこれを繰り返し、必要な値を与えます。


ALTERNATEのOPTION:

これは、私は上記のあなたを与えたものに代替の答えです。上記の答えはあなたの質問で提起した特定の問題に対処しています。 この答えはあなたの質問にそれらを記述していた方法をやり遂げることを潜在的に回避するための他の選択肢を与えてくれるでしょう...

あなたの問題を理解すれば、 256個の2行2列の行列をランダムに選び、30個をランダムに選びたいとします。これらの2行2列の各行列は、それ自身の変数(x1x256)に格納されているように聞こえる。あなたが最初にすべての値を初期化する必要があります

xArray = cell(1,256); % Initializes an empty array of cells 
xArray{1} = [1 1; 2 2]; % Enters a value for the first matrix 

xArray = zeros(2,2,256);  % Initialize all matrices as [0 0; 0 0] 
xArray(:,:,1) = [1 1; 2 2]; % This enters a value for the first matrix 

やセル配列:代わりに、私はどちらかの3-D配列としてただ一つの変数内のすべての256個の行列を保存することをお勧め。あなたがランダムに30個の値を選択したい場合、あなたは次の3-Dアレイ又はRANDPERMを用いてセルアレイの順序の三次元のいずれかの順序をランダム化することができる:

startOrder = 1:256;    % The default order of the matrices 
index = randperm(256);   % Randomly order the numbers 1 to 256 
xArray = xArray(:,:,index);  % For a 3-d array 
xArray = xArray(index);   % For a cell array 

次にちょうど最初の使用します(代わりに、あなたが前にいたように、個々の変数の)あなたの計算のためのxArrayで30のエントリ:

x = xArray(:,:,1); % Puts the first matrix from the 3-D array in x 
x = xArray{1};  % Puts the first matrix from the cell array in x 

あなたは行列の新しいランダム化された配列を生成し維持するRANDPERMの使用を繰り返し続けることができます。あなたが使用している元の行列を追跡する必要がある場合は、あなたがxArrayをランダム化した後、この行を追加する必要があります。

startOrder = startOrder(index); 

startOrderのエントリは、行列だったあなたの元の位置を教えてくれますたとえば、startOrderの最初の配列エントリが40の場合、xArrayの最初の位置の行列は、最初にxArrayの初期化時に入力した40番目の行列です。

希望すると便利です。

+0

やや速い答え... しかし、私はそれ以外の方法でやりたいです。 MathWorks社のMATLAB内のすべてのvarは2x2の行列になるところ私のテキストファイルは、VARA、VARBのような変数の名前が含まれていることを意味 ... はその後、私はMatlabのにそれらを読み込むことができます。.. 例えば テキスト= X X = [0 1 ; 2 3] –

+0

改訂された質問に答えるために私の答えを更新しました。 – gnovice

+0

thx。しかし、私は変数をインポートしたいのですが、それらを再度名前を付ける必要はありません(256個の変数が順番に変わります)ので、基本的に私の唯一の問題はtextscanの使用中にテキスト配列から離れてしまうことです。 xはxでなくxでなければなりません –

関連する問題