2016-05-12 6 views
0

как часть большего скрипта Я хочу хранить данные из цикла while в матрице. Я хочу сохранить части матрицы COG_Ton_Av, которая составляет 1738x3 в новой матрице. COG_Ton_Av изменяется в каждом цикле, поэтому я хочу сохранить результаты снаружи. Я нашел несколько записей о том, как хранить данные в векторе, но ничего для матрицы. Что я попытался это:Matlab - хранение данных из петли в матрице (не вектор)

valuesforts= zeros(1000,3); 
yr =1 
while Qn>0 
yindex = Gmhk*100 
zindex = round(gs*100) 
ts = (COG_Ton_Av ((zindex:yindex),:)) 
valuesforts(yr)=ts 
yr = yr+1 
end 

Я просто разместил части цикла в то время, чтобы сделать этот вопрос проще, я надеюсь, что это достаточно, чтобы ответить на этот вопрос. При попытке этого получить следующую ошибку:

Несоответствие размеров подзаголовков.

Ошибка в cutoff_work14_priceescalation_and_stockpiling (строка 286) valuesforts (Yr) = Ts

ответ

0

Ошибка означает, что т.с. является различным размером, чтобы valuesforts (и это индексируется год в качестве вектора.

Если размеры ТС меняются на каждой итерации цикла затем использовать ячейки обозначения:

valuesforts = cell(<number of years>); 
... 
valuesforts{yr} = ts; 

то размерности тс не будет иметь значения

.

Для извлечения данных также используйте {}, например.

meanValues(yr) = mean(valuesforts{yr}); 

Имейте в виду, что матрица в каждой ячейке valuesforts будет иметь те же Вспучивания, как ц, когда он был назначен.

В качестве альтернативы, если TS всегда одинаковый размер предварительно выделить valuesforts как:

valuesforts = zeros(<number of years>,<expected length of ts>,3); 
... 
valuesforts(yr,:,:) = ts; 

Тогда зависит от того, что вы хотите сделать с valuesforts .. изменить его или построить его.

В худшем случае (не рекомендуется) вы можете позволить значениям возрастать с каждой итерацией цикла. инициализируется с пустым:

valuesforts=[]; 

затем вертикально добавить тс к valuesforts:

valuesforts = [valuesforts; ts]; 

это даст вам матрицу с 3 столбцами и количество лет * количество строк в тс в каждой итерации цикла.

+0

спасибо за ответ, теперь он работает, но вывод находится внутри ячеек - как я могу получить доступ к этому полезному впоследствии? (в основном обратно в матрицу Matlab?) – KiW

+0

обновлен с примером того, как извлечь данные из ячейки – Timur

+0

спасибо :), но есть ли шанс получить его в виде матрицы снова? так что я могу продолжать вычислять с ним? .... мне нужны единственные доступные значения ... но спасибо за вашу помощь :) – KiW