如何将for循环中的矩阵保存到另一个矩阵

时间:2015-07-27 14:18:52

标签: matlab for-loop matrix

我有一个 5 -by- 200 矩阵,其中i:50:200i=1:50彼此相关,所以例如矩阵列151101151彼此相关,列4999149199也相互关联。

我想使用for - 循环创建另一个矩阵,根据此关系重新排序前一个矩阵。

我的代码是

values=zeros(5,200);

for j=1:50
    for m=1:4:200
        a=factor_mat(:,j:50:200)
        values(:,m)=a
    end
end

但是,代码不起作用。

1 个答案:

答案 0 :(得分:2)

这是发生了什么。假设我们在外循环的第一次迭代中,所以j == 1。这有效地为您提供:

j = 1;
for m=1:4:200
   a=factor_mat(:,j:50:200)
   values(:,m)=a;
end

因此,您要为a创建相同的子矩阵(j不会更改)50次并将其存储在values矩阵中的不同位置。这不是你想要做的。

要创建每个4列子矩阵并将其存储在50个不同的位置,您需要使用j告诉您当前处理的50个子列中的哪一个:

for j=1:50
   a=factor_mat(:,j:50:200);
   m=j*4;    %// This gives us the **end** of the current range
   values(:,m-3:m)=a;
end

我在这里使用了一个小技巧,因为Matlab数组的索引从1开始而不是0.我计算了我们要插入的 last 列的索引。对于第一组,这是第4列。自j == 1j * 4 == 4。然后我减去3以找到第一列索引。

这将解决你的循环问题。但循环不是很Matlab-ish。他们过去很慢;现在他们已经足够了。但他们仍然不是很酷的做事方式。

要在没有循环的情况下执行此操作,您可以使用reshapepermute

a=reshape(factor_mat,[],50,4);
b=permute(a,[1,3,2]);
values=reshape(b,[],200);