我想在for
循环中使用for循环(我认为)来生成一些向量,我可以单独使用它来使用polyfit
。
我有一个768x768矩阵,我把它分成了768个单独的单元格向量。但是,我想将每个1x768矩阵分成16个点的部分 - 即48个新的矢量,其长度为16个值。我想用这些信息做一些曲线拟合。
我想将48个向量中的每一个命名为不同的但是我想为768列中的每一个做这个。我可以很容易地单独做这个,但我希望有一种方法来组合它们。我试图在for语句中将其作为for语句,但它不起作用,我想知道是否有人可以给我一些关于如何产生我想要的东西的提示。我附上了代码。
Qne
是我的768 * 768矩阵,包含所有要点。
N1=768;
x=cell(N,1);
for ii=1:N1;
x{ii}=Qnew(1:N1,ii);
end
for iii = 1:768;
x2{iii}=x{iii};
for iv = 1:39
N2=20;
x3{iii}=x2{iii}(1,(1+N2*iv:N2+N2*iv));
%Gx{iv}=(x3{iv});
end
end
答案 0 :(得分:2)
使用普通的2D矩阵进行内部分割。为什么?重塑很容易,你可能会使用的许多拟合操作都会在矩阵的列上运行。
for ii=1:N1
x{ii} = reshape(Qnew(:, ii), 16, 48);
end
现在x{ii}
是一个2D矩阵,大小为16x48。如果您想单独处理第jj个分割窗口,可以说x{ii}(:, jj)
。但通常你不必这样做。例如,如果你想要每个窗口的平均值,你可以说mean(x{ii})
,它将取每列的平均值,并给你一个48元素的行向量。
未提出问题的额外参考:如果您希望向量的窗口重叠而不是邻接,请参阅信号处理工具箱中的buffer
。
编辑我的回答:
更进一步,3D矩阵可能是等大小向量的最佳表示。记住reshape()
按列读出,并按列填充新矩阵,这可以通过单个重塑来完成:
x = reshape(Qnew, 16, 48, N1);
x现在是一个16x48x768的3D数组,第ii个向量的第jj个窗口现在是x(:, jj, ii)
。