1

私はMATLABの初心者であり、このすばらしいWebサイトで(再び:))ヘルプが見つかることを願っています。これは、一連の個人のモデル予測結果に関するものです。したがって、私は一連の変数(各個人の基本的な結果を含む)を持っており、それらの命名法は最初の部分でのみ異なります..e、g:

マイクの結果は次のように保存されます:Mike_Sim_V_software1アダムの結果は次のように保存されます:Adam_Sim_V_sofwtare1サラの結果は次のように保存されます:Sarah_Sim_V_sofwtare1など...

名前のリスト['Mike'、'Adam'、'Sarah'など]とID(idxという名前の変数に%saved)が既にあります。

上記のすべての変数(結果変数)について同様の一連の計算を実行したいので、変数の名前は最初の部分だけが異なるため、次のようなループ関数を作成することを考えました。

for idx=1:80 
x= Indi_All {idx,1} (1,1) 

% idx: is the Individual IDs ... 80 is the total number of individuals
% Indi_All is a cell array containing the basic info, IDs and demographics.. 
here x will get the initial part of the variables names e.g. 'Mike' or 'Adam'

Indi_Results {idx,1} = x
Indi_Results {idx,2} = prctile (x_Sim_V_software1', (5))
Indi_Results {idx,2} = x_5P_software1'
Indi_Results {idx,3} = prctile (x_Sim_V_software1', (10))
Indi_Results {idx,3} = x_10P_software1'
Indi_Results {idx,4} = prctile (x_Sim_V_software1', (25))
Indi_Results {idx,4} = x_25P_software1'
Indi_Results {idx,5} = prctile (x_Sim_V_software1', [50])
Indi_Results {idx,5} = x_Median_software1'
Indi_Results {idx,6} = prctile (x_Sim_V_software1', (75))
Indi_Results {idx,6} = x_75P_software1'
Indi_Results {idx,7} = prctile (x_Sim_V_software1', (90))
Indi_Results {idx,7} = x_90P_software1'
Indi_Results {idx,8} = prctile (x_Sim_V_software1', [95])
Indi_Results {idx,8} = x_95P_software1'


% the code and calculations go even more and more ...

end 

専門家が理解できるように...xはコード(右の列)で「x」として認識されますが、実際に意味したいものではありません。つまり、「マイク」のような文字列値を含む変数xです。 。

私の質問は:

1)これを解決できますか?2つの異なる文字列から変数の名前を作成する関数はありますか?!したがって、おそらくnum2strに似ていますが、文字列を文字列に追加します。つまり、変化する部分「マイク」、「アダム」などを変化しない部分「_Sim_V_software1」に追加して、ループ関数で使用できる変数を取得するには?!

わからない…質問がばかげている気がしますが、どういうわけかこれに多くの時間を費やし、思い通りに動かない!これが私の心が週末が始まることについてすでに何かを知っているという事実とは何の関係もないことを願っています:)

よろしくお願いします。よろしくお願いします…!

4

2 に答える 2

2

実際には非常に簡単です。eval()次のような関数を使用する必要があります。

Indi_Results {idx,1} = eval(x)
Indi_Results {idx,2} = prctile (eval([x '_Sim_V_software1'])', (5))
Indi_Results {idx,2} = eval([x '_5P_software1'])'
...

文字列の連結には、上記のように [str1 str2] を使用できます。

よろしく

于 2013-01-18T16:47:36.153 に答える
1

使用evalは可能ですが、おそらく必要ありません。

代わりに、ファイルを cell 配列に読み込むことをお勧めします。次に、配列にインデックスを付けて操作します。例えば、

fn = {'Mike','Adam','Sarah'};


for i=1:length(fn)
  % use the functional form of the load() function
  % to get the time series into t{i} regardless of the filename.

  t{i} = load([fn '_Sim_V_software1 ']);

  res(i, :) =  prctile (t{i}, [5 10 25 50 75 90 95]);
end

上記の例では、セル配列は実際には必要ありませんがt{}、時系列でさらに分析を行う必要があると想定しています。

于 2013-01-18T19:36:54.260 に答える