将数据输入双重使用循环

Inputting data into a double using loop

我在使用循环将数据输入双精度数时遇到了一个小问题。当循环开始时,double(称为 M)是空的。我想将另一个双精度数据(称为 CC 只有 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's。谁能告诉我如何以条目始终从第一行开始的方式将数据输入 M(即,space 中没有零)?我猜问题出在 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

如果我正确理解你的问题,下面的微不足道的修改将使你的代码工作。

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=2end=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

希望上面的代码片段对你有用。