Matlab中的struct变量通过for循环重叠

时间:2019-04-17 14:02:57

标签: matlab

我正在matlab中进行一些回归。

我想通过结构很好地存储变量。

以下是一些代码:

    clc;                                                                                        
clear;                                                                                      
fruit_names={'Apple','Pear','Melon'};
Predictors.Apple = rand(500,11);
Predictors.Pear = rand(500,11);
Predictors.Melon = rand(500,11);
Returns.Apple = rand(500,1);
Returns.Pear = rand(500,1);
Returns.Melon = rand(500,1);
%%
 kk=1;
 for d = 1:length(fruit_names)
 for i = [1,2,3,4,5,6,12,24,48,60]
 for jj = 1:11
     K = i;
     xinit=[Predictors.(fruit_names{d})(:,jj)];
     yinit=Returns.(fruit_names{d});
     [b,bint,r,rint,stats] = regress(yinit,xinit);
     Stats.(fruit_names{d})(kk+1)=stats(1);
     kk=kk+1;%to help with reporting
 end
 end   
 end

说实话,这是我在一个简单示例中的最佳尝试。如果我没有记错的话,它确实需要计量经济学工具箱。

我遇到的问题是Stats结构存储我需要的结果,但是在第一个变量包含一些无用的零之后。

我已经发布并删除了一个较早的问题,该问题建议删除(kk,:)变量,但如果这样做,它仅包含最终结果,而不包含通过for循环进行的结果演变。

1 个答案:

答案 0 :(得分:1)

它是问题所在的kk变量的位置。

似乎您需要从后两个循环中收集结果。

clc;                                                                                        
clear;                                                                                      
fruit_names={'Apple','Pear','Melon'};
Predictors.Apple = rand(500,11);
Predictors.Pear = rand(500,11);
Predictors.Melon = rand(500,11);
Returns.Apple = rand(500,1);
Returns.Pear = rand(500,1);
Returns.Melon = rand(500,1);
%%

 for d = 1:length(fruit_names)

 kk=1; %move the kk = 1 variable here.

 for i = [1,2,3,4,5,6,12,24,48,60]
 for jj = 1:11
     K = i;
     xinit=[Predictors.(fruit_names{d})(:,jj)];
     yinit=Returns.(fruit_names{d});
     [b,bint,r,rint,stats] = regress(yinit,xinit);
     Stats.(fruit_names{d})(kk+1)=stats(1);
     kk=kk+1;%to help with reporting
 end
 end   
 end

享受你的水果!