【问题标题】:How to save matrices from for loop into another matrix如何将for循环中的矩阵保存到另一个矩阵中
【发布时间】:2015-07-27 14:18:52
【问题描述】:

我有一个 5-by-200 矩阵,其中 i:50:200i=1:50 彼此相关,例如矩阵列 1 ,51,101,151 相互关联,49,99,149,199 列也相互关联。

我想使用for-loop 创建另一个矩阵,该矩阵根据这种关系对前一个矩阵进行重新排序。

我的代码是

values=zeros(5,200);

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

但是,代码不起作用。

【问题讨论】:

  • does not work 不是一个有用的问题摘要。请提供minimal, functioning example 和输入/输出示例。
  • @AllenLi 看起来你有索引问题?您可以发布错误消息以及 excaza 所说的内容吗?

标签: matlab for-loop matrix


【解决方案1】:

这就是正在发生的事情。假设我们正在进行外循环的第一次迭代,所以j == 1。这有效地为您提供:

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

因此,您为aj 不会改变)创建相同的子矩阵 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。他们过去很慢;现在他们已经足够了。但它们仍然不是很酷的做事方式。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多