2013-01-16 27 views
3

我是MATLAB的初學者,我希望能在這裏找到一些幫助。我在一個大矩陣中共有80個人的模型預測結果。我需要從大矩陣中提取每個人的數據,將它們分配到一個新的變量/矩陣中,進行一些額外的計算,然後根據需要繪製某些信息。提取一個大矩陣的部分,並將它們分配給具有循環功能的新變量

要做到這一點,我試圖用循環函數編寫腳本,但是複雜或者更準確:以原始方式!

簡化的例子: 我的矩陣稱爲:All_Indi_Data ....其尺寸爲:600行×21列

%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的數據),而不會浪費大量時間和空間(重新複製核心部分的代碼一遍又一遍)爲腳本,並使用循環功能?!換句話說,我想檢測 - 用循環函數&分組變量 - 哪些值是感興趣的,然後繪製它們(例如,列第3列的數據與列4的數據爲每個人,從第一個開始到最後一個)?

我希望我描述清楚我的問題,並希望能聽到來自專家的傢伙:)什麼......

非常感謝提前..

回答

2

試試下面的代碼:

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

我所做的是:在每次迭代中,我都會搜索變量idx中指示的ID值。請注意,我不使用'i'作爲變量的名稱,因爲Matlab使用它,'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 
+0

哦......非常感謝..對於明確的答案,但對於非常快速的答覆...我會嘗試它(我得到一個紅色的第一個複製過去: p),然後我將更新我的答案,,, –

+0

更新.... 我收到此錯誤消息: 使用horzcat的錯誤 串聯的矩陣的大小不一致。 Test_Script(line 6)中的錯誤 eval(['Indi_'num2str(idx)'= ALL_Indi_Data('num2str(pos)',1:21);']); 任何線索>>? 我必須提到,對於一個人可能有6或7個信息原料......等等。 再次提前致謝 –

+0

這可能是因爲它在多行中查找ID。如果你想要第一個匹配的行,你應該用num2str(pos(1))改變num2str(pos)。如果你想要他們所有......你想如何拯救他們?用哪個變量名? – Digna

相關問題