テキストファイル内のデータは、この(スペースで区切られた文字列)のように見える場合:
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列の各行列は、それ自身の変数(x1〜x256)に格納されているように聞こえる。あなたが最初にすべての値を初期化する必要があります
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番目の行列です。
希望すると便利です。
テキストファイルには変数名のみが格納されますか、またはそれらの変数に割り当てられるデータも格納されますか? – gnovice
これは非常に混乱し複雑な問題のようです。大規模なアプリケーションについて詳しく説明できますか?これはすべてこれが使用されていますか?私は、おそらく.matファイルを使用するなど、ファイルから変数名を読み取るよりも、あなたの問題を処理する方がはるかに簡単な方法があるかもしれないと感じています。 – gnovice