2013-11-18 5 views
0

У меня следующая функциятройного цикла в MATLAB

for z=1:dimensions(2) % maximum of z 
    M = []; 
    for t=1:dimensions(4) %% maximum of t 
     M = [M test.field_data(x,z,y,t)]; 
    end 
    t = [time]; 
end 

Я хочу, чтобы создать матрицу М, которая состоит из всех field_data значений для каждого значения хуга (test.field_data(x,z,y,t) для указанного диапазона т. С помощью этого Стабилизатора loop, я могу получить значения для каждого номера z, но как это можно расширить, так что также включены разные значения x (x=1:dimensions(1)) и y (y=1:dimensions(3))? У меня трудности с настройкой тройных for-loops должным образом. вы, пожалуйста, помогите мне с этим?

ответ

2

Вам не нужны никакие петли.

test.field_data(1:dimensions(1),z,1:dimensions(3),1:dimensions(4)) 

В программном коде M удаляется в начале каждой итерации (M=[])

+0

Я думаю, вам понадобится нечто вроде '1: dimensions (4)' вместо 't'. –

+0

«xzy'-order запутал меня, ответ обновлен. – Daniel

+0

Возможно ли получить матрицу M, как указано Daniel R для каждого t? Например, если t = 1,2,3,4), как я могу легко создать четыре матрицы M1, M2, M3 и M4? – Justinnl

1

Используйте cellfun, чтобы выбрать th е соответствующие t интервальные

c = cellfun(@(x) x.filed_data(:,:,:,t_intrvl), test, 'UniformOutput', false); 

cat клетки в единый массив M

M = cat(4, c{:}); % cat along fourth dim 

Вы можете reshapeM в любом случае вы, пожалуйста, прямо сейчас.

+0

Спасибо за ваш вклад. На самом деле, я думаю, что ответ без конкатенированной части будет работать отлично. В зависимости от количества t_intrvl будет создано соответствующее количество матриц M, верно? Можно ли хранить каждую матрицу отдельно (например, M1, M2, M3 и т. Д.)? – Justinnl

+0

@ Justinnl вы можете разделить 'M' на несколько элементов ячейки, используя' mat2cell'. – Shai

+0

Спасибо, что поделились своими идеями относительно этой темы. – Justinnl

Смежные вопросы