2013-12-05 4 views
0

Я даже не уверен, что название описывает то, что я хочу сделать, поэтому позвольте мне попытаться уточнить.Петлевые матрицы в структуру

Каждая итерация цикла создает матрицу X. В настоящее время только окончательная итерация матрицы X остается после завершения цикла. Однако мой желаемый конечный результат - 6 X. Один для каждой итерации цикла.

В принципе, я хочу сохранить все 6 из X матриц, а не перезаписывать их после каждой итерации.

for col=2:7 
    logprice=log(ret(1:end,col)); 
    logret=diff(logprice); 
    exret=logret-logRFree; 
    price_mat(:,col-1)=logprice; 
    ret_mat(:,col-1)=logret; 
    exret_mat(:,col-1)=exret; 

    X=[ret_mat(:,col-1) termspread creditspread inflation realrate ]; 

end 

ответ

4

Если размер X отличается на каждой итерации (и это выглядит именно так), это может быть проще всего хранить их в массив ячеек:

% before loop 
X = cell(N,1); 
% in loop, with a counter ii ... 
X{ii} = [...]; 

Если X матрица были самыми одинаковый размер на каждой итерации цикла, вы можете предварительно распределить 3D-массив и сохранить на каждый фрагмент (например, X=zeros(R,C,P); ... X(:,:,ii) = [...];);

1

Существует два наиболее распространенных способа. Cell arrays - один из них. Другая - трехмерная матрица. Он также может быть обобщен на n-D-матрицы.

Клетчатые массивы могут обрабатывать различные размеры матрицы X на каждой итерации. 3-D матрицы не могут. Все матрицы должны быть одинакового размера. Вы можете предварительно выделить ячейки, а также трехмерные матрицы, чтобы сохранить время выполнения на больших циклах. Кроме того, это хорошая практика.

  1. Preallocate cell array
  2. Preallocate matrix

Это может быть сделано следующим образом:

count=0; 
for col=2:7 
    count=count+1; 
    logprice=log(ret(1:end,col)); 
    logret=diff(logprice); 
    exret=logret-logRFree; 
    price_mat(:,col-1)=logprice; 
    ret_mat(:,col-1)=logret; 
    exret_mat(:,col-1)=exret; 

    %%%%%%Execute only one of the following two statements%%%%%%% 
    X{count}=[ret_mat(:,col-1) termspread creditspread inflation realrate ]; 
    X(:,:,count)=[ret_mat(:,col-1) termspread creditspread inflation realrate ]; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
end 
Смежные вопросы