对于另一个for循环中的循环来创建新的向量集

时间:2012-05-29 11:52:45

标签: matlab vector for-loop matrix

我想在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

1 个答案:

答案 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)