我在使用循环将数据输入到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
答案 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
我希望上面的代码段适合您。