Переменная struct в Matlab, перекрывающаяся через цикл for - PullRequest
2 голосов
/ 17 апреля 2019

Я использую регрессию в 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

Это, честно говоря, моя лучшая попытка на простом примере.Если я правильно помню, для этого требуется набор инструментов Econometrics.

Проблема, с которой я столкнулся, состоит в том, что структура Stats хранит нужные мне результаты, но после первых переменных есть несколько бесполезных нулей.

Я опубликовал и удалил предыдущий вопрос, в котором предлагается удалить переменные (kk, :), но если я сделаю это, он содержит только конечные результаты, а не эволюцию результатов через цикл for.

1 Ответ

1 голос
/ 17 апреля 2019

Положение переменной 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

Наслаждайся фруктами!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...