使用循环

时间:2015-11-14 00:50:02

标签: matlab loops double

我在使用循环将数据输入到double时遇到了一个小问题。当循环开始时,double(称为 M )为空。我想将来自另一个双精度数据(称为 C C 只有1列)的数据一次输入 M 一列。我知道 M 中会有12列我不知道我会有多少行。为简单起见,假设我在 C 中有123行。我尝试过这样的事情:

 M=double.empty;     
 for b=1:12
     <loop to do some computation to create C>
         for a=1:size(C,1)         
             M(1+end,b)=C(a,1)
         end
     end
 end

这里的问题是,当b = 1时b的循环,一切都很好。但是,当b = 2时,数据将从 M(123 + 1,2)开始。因此, M(1:123,2)= 0 。谁能告诉我如何以一种条目始终从第一行开始的方式将数据输入到M中(即,没有零填充空格)?我猜这个问题是1+end,但我不知道如何解决它。

编辑:完整代码:

 for b=1:length(conds_BOLD)
    for c=1:length(subj_CTL)

        PPI_comp_CTL_file=spm_select('FPList',fullfile(maindir,'PPI_component',config,roi_list{a},type,roi_format),...
            sprintf('^%s_%s_%s.*\\.mat$',subj_CTL{c},roi_list{a},conds_PPI{b}));
        PPI_comp_CTL_data=load(PPI_comp_CTL_file);

        for d=1:size(PPI_comp_CTL_data.est,1)
            M_PPI_CTL(1+end,b)=PPI_comp_CTL_data.est(d,1);
        end
     end
 end

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,以下微不足道的修改将使你的代码有效。

M=double.empty;     
for b=1:12
    <some computation to create C>
     for a=1:size(C,1)         
         M(a,b)=C(a,1) %modified here
     end
end

执行1+end后,end关键字将根据当时M矩阵的大小确定索引。因此,在第一次迭代中,end=0,然后在b=2时,end=size(M,1)

更快捷的方式:

M=double.empty;     
for b=1:12
    <some computation to create C>
     M(:,b)=C;
end

如果您可以详细说明如何计算C,可以加快速度。此外,不要将M分配为空矩阵,而是执行以下操作:

M=zeros(size(C,1),12);

C的大小增加时,您会发现速度存在很大差异。

OP编辑问题后更新了代码:

for b=1:12
    count=0;
    for c=1:N
       <<code which generates a new C every time>>
       M(count+1:count+size(C,1),b)=C;
       count=count+size(C,1);
    end
end

我希望上面的代码段适合您。