4

我是 MATLAB 的初学者,希望能在这里找到一些帮助。我在一个大矩阵中总共有 80 个人的一些模型预测结果。我需要从大矩阵中提取每个人的数据,将它们分配到一个新的变量/矩阵中,进行一些额外的计算,然后根据需要绘制某些信息。

为此,我正在尝试编写一个带有循环函数的脚本,但是以一种复杂的,或者更准确地说:以一种原始的方式!

简化示例:我的矩阵称为:All_Indi_Data .... 它的维度是:600 行 x 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 的数据)而不浪费大量时间和空间(wto 重新复制代码的核心部分)并再次)为脚本,并使用循环功能?!换句话说,我想检测 - 使用循环函数和分组变量 - 哪些值是感兴趣的,然后绘制它们(例如,第 3 列中的数据以及每个人的第 4 列中的数据,从第一个到最后一个)?!

我希望我清楚地描述了我的问题,并希望听到专家们的意见:) ...

非常感谢提前..

4

1 回答 1

3

试试下面的代码:

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

我所做的是:在每次迭代中,我搜索 ID 的值,在变量 idx 中指示。请注意,我没有使用“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
于 2013-01-16T14:36:42.227 回答