0

我想在一个循环中使用一个 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
4

1 回答 1

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 is now a 16x48x768 3D array, and the jj'th window of the ii'th vector is now x(:, jj, ii).

于 2012-05-29T12:53:35.113 回答