4

私はMATLABの完全な初心者であり、ここでいくつかの助けを見つけたいと思っています。1つの大きなマトリックスにまとめて80人のモデル予測結果があります。大きな行列から各個人のデータを抽出し、それらを新しい変数/行列に割り当て、追加の計算を行ってから、必要に応じて特定の情報をプロットする必要があります。

そうするために、私はループ関数を使用してスクリプトを作成しようとしていますが、複雑な、またはより正確には、原始的な方法で!

簡略化した例:私の行列は次のように呼ばれます:All_Indi_Data ....その次元は:600行x21列

%Column 1: grouping variable (e.g., code or ID with values 1,2,3,4,5, etc.); 
%Column 2: independent var.;
%Column 3: t;
%Column 4: OBS;
%Column 5: PRED;



i= length (All_Indi_Data);

%% First Indi.
q=1;    % indicating the ID of the indi for which I want to extract the data
j=1;    % variable added to insure writing start from the first row

for r=1:i
if All_Indi_Data (r,1)==q
  Indi_1 (j,1:21) = All_Indi_Data (r,1:21)
  j=j+1
end

end

%% Second Indi.
q=q+1
j=1

for r=1:i
if All_Indi_Data (r,1)==q
   Indi_2 (j,1:21) = All_Indi_Data (r,1:21)
   j=j+1
end

end

.
.
.

1)私の最初の質問は、ループ関数の有無にかかわらず、より簡単な方法でこれらのデータを新しい変数(Indi_1、Indi_2など)に割り当てることができるかどうかです。よろしくお願いします。

2)多くの時間とスペースを無駄にすることなく(コードのコア部分を再コピーするために)前述の大きなマトリックスからこれらの選択された部分(グループ化変数、たとえばIndi_1のデータに従って)をプロットするコードまたは方法はありますか?そして再び)スクリプトのために、そしてループ関数を使用していますか?!言い換えると、ループ関数とグループ化変数を使用して、関心のある値を検出し、それらをプロットしたいと思います(たとえば、最初から最後まで、各個人の列4のデータを含む列3のデータ)?!

私は自分の問題を明確に説明し、専門家から何かを聞くことを望んでいます:) ...

よろしくお願いします。

4

1 に答える 1

3

次のコードを試してください。

for idx=1:80
    pos=find(All_Indi_Data(:,1)==idx);
    eval(['Indi_' num2str(idx) '=All_Indi_Data(pos,:);']);
end

私がしていることは、各反復で、変数idxで示されているIDの値を検索することです。Matlabは変数の名前として「i」を使用せず、複素数には「j」と虚数を使用するため、問題が発生する可能性があることに注意してください。

次に、findを使用して、その個人の情報を見つけることができるAll_Indi_Dataの位置を検索します。これで、変数「pos」に、関心のある個人の情報がある行のインデックスがあります。

最後に、evalを使用して、各個人のデータを変数に抽出します。evalをループと組み合わせると、多くの変数を簡単に作成できることに注意してください。抽出する行を「pos」で示し、すべての列が必要なので、「:」だけを使用します(「1:21」も使用できます)。

別の同様のループを使用すると、必要な情報をプロットできます。例えば:

for idx=1:80
        eval(['x=Indi_' num2str(idx) ';']); 
        % Now I have in X the information for this individual
        %Plot the columns of x I want
        plot(x(:, 3), x(:,4));
        pause; %stay here until a press a key

end
于 2013-01-16T14:36:42.227 に答える