Matlab - хранение данных из цикла в матрице (не вектор)

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

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 

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

Несоответствие размера назначения в подписке.

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


person KiW    schedule 12.05.2016    source источник


Ответы (1)


Ошибка означает, что размер ts отличается от размера valuesforts (и он индексируется с помощью yr в качестве вектора.

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

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

тогда размеры ts не будут иметь значения.

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

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

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

В качестве альтернативы, если TS всегда имеет один и тот же размер, предварительное выделение значений выглядит следующим образом:

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

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

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

valuesforts=[];

затем вертикально добавьте ts к значениям:

valuesforts = [valuesforts; ts];

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

person Timur    schedule 12.05.2016
comment
спасибо за ответ, теперь он работает, но вывод находится внутри ячеек - как я могу получить доступ к этому полезному впоследствии? (в основном обратно в матрицу Matlab?) - person KiW; 12.05.2016
comment
обновлен с примером того, как извлечь данные из ячейки - person Timur; 12.05.2016
comment
спасибо :) но есть ли шанс снова получить его как матрицу? так что я могу продолжить расчет с ним? .... мне нужны доступные значения ... но спасибо за вашу помощь :) - person KiW; 13.05.2016
comment
какой размер тс? если это то же самое на каждой итерации цикла, используйте альтернативный вариант, где 'valuesforts(yr,:,:)' по-прежнему является матрицей (строго говоря, это массив, поскольку он имеет более двух измерений). .. Также включен еще один «уродливый» вариант. - person Timur; 13.05.2016