MATLAB中的双for循环,存储信息

MATLAB中的双for循环,存储信息,matlab,for-loop,Matlab,For Loop,我在MATLAB中有两个for循环 其中一个for循环导致不同的变量被插入到模型中,它们是43,然后我有5个视界 所以我估计这个模型有215次 我的问题是我想把它存储在215x5矩阵中,我有x5的原因是我估计了5个变量,4个是固定的,另一个来自for循环 我尝试了两种方法 首先,我创建了一个名为out的变量 out=zeros(215,5); 第一个for循环是 for i=[1,2,3,4,5]; for ii=18:60; 第二个for循环是 for i=[1,2,3,4,5];

我在MATLAB中有两个for循环

其中一个for循环导致不同的变量被插入到模型中,它们是43,然后我有5个视界

所以我估计这个模型有215次

我的问题是我想把它存储在215x5矩阵中,我有x5的原因是我估计了5个变量,4个是固定的,另一个来自for循环

我尝试了两种方法

首先,我创建了一个名为out的变量

out=zeros(215,5);
第一个for循环是

for i=[1,2,3,4,5];
for  ii=18:60;
第二个for循环是

for i=[1,2,3,4,5];
for  ii=18:60;
18:60是我使用XLS read定义变量的方式,例如,它们作为(数据:,ii)插入模型中

我尝试用两种方式存储数据,我想存储包含五个估计值的OLS

首先,

out(i,:)=OLS;
该方法创建一个5 x 5矩阵,在每个视界处对其中一个(18:60)进行估计

第二,

out(ii,:)=OLS;
这只在一个视界上存储每个变量的变量(18:60)

我想有一个矩阵,它存储了我的每一个(18:60)在每个视界的所有估计值

最小示例

clear;

for i=[1,2,3,4,5];
    K=i; 
    for  ii=18:60
        x=[1,2,3,i,ii];
        out(i,:)=x;       
    end
end
因此,变量out将存储
1 2 3 5 60

我想让变量存储所有的组合

i、 e


正如您所发现的,只使用一个循环变量对输出结果进行索引,大多数结果都被覆盖,只留下相关循环的最终迭代结果

有两种方法可以创建索引变量

1-您可以使用自变量,在循环之前初始化,在内部循环结束时递增

kk=1; 
for i=1:5
    for ii=18:60
        %calculate OLC
        out(kk,:)=OLC;
        kk = kk+1;
    end 
end
2-使用
i
ii

kk = i + 5*(ii-18)  

(如前所述,在循环中使用,不增加)

最简单的解决方案是使用3D矩阵:

for jj=[1,2,3,4,5];
    K=jj;
    for ii=18:60
        x=[1,2,3,jj,ii];
        out(ii-17,jj,:)=x;       
    end
end
如果现在对
out
矩阵进行整形,则得到的结果与etmuse答案中的第一个块相同:

out = reshape(out,[],size(out,3));

(注意:我用
jj
替换了
I
I
ii
两者太相似了,这会导致混淆。最好使用不同的字母作为循环索引。
I
也可以使用,但它也是内置的虚数sqrt(-1)。因此我更喜欢使用
ii
而不是
I

请出示一张照片。将
OLS
替换为
rand(5,5)
。代码的文字描述很难理解,特别是当你可以显示代码的时候!但是,现在看起来有两个循环,大小为45*5=215,在每个循环中称为OLS,大小为25。所以你必须是215x25,不是吗?我会努力的,谢谢。我已经添加了一个我认为可以的例子!让我知道你能澄清你在文本中使用5x5矩阵的意思吗<代码>x有1x5,而不是5x5请不要使用
i
ii
。这只会引起混乱。为什么不
ii
jj
?谢谢@AnderBiguri在我的示例中,第一个选项似乎很好。@AnderBiguri谢谢,我把
I
ii
放在计算中,但忘记了包含较高的起始值。尽量不要使用
I
作为循环索引,因为它会覆盖MATLABs的虚拟单位,并可能导致难以发现错误。此外,您还可以使用
I
ii
计算
kk
MATLABs内置函数sub2ind。注意,第一个块和第二个块产生不同的输出顺序,因为MATLAB按列存储数据。