2014-09-21 2 views
0

Итак, я новичок в MatLab, и я пытаюсь сделать что-то, что, я уверен, это возможно. Хотя я не уверен.Сохранение всех значений, сгенерированных циклом for

Вот что я пытаюсь в двух словах: я генерирую последовательность результатов (M) из матрицы C. Матрица C состоит из 16 ячеек (ячейки 4x4, каждая ячейка 90x6). Из каждой из этих ячеек я пытаюсь вычислить среднее значение. Это дает мне средние значения, но переписывает M после каждой итерации:

for i=1:4; 
for j=1:4; 
M=mean2(C{i,j}) 
end 
end 

Что мне нужно, это матрица 4х4, где средние значения для всех ячеек С, перечислены, как я могу это сделать?

ответ

1
M = zeros(4); %// pre-allocate !!! 
for ii=1:4; 
    for jj=1:4; 
     M(ii,jj)=mean2(C{ii,jj}) 
    end 
end 

Несколько указателей:

  1. Предварительное распределение - это очень хорошая практика, чтобы предварительно выделить массивы, которые обновляются в петлях.
    См., Например, this thread.

  2. Лучшее not to use i and j as variable names in Matlab.

  3. Вы можете найти cellfun полезным инструментом при работе с сотовыми массивов:

    M = cellfun(@mean2, C); 
    
+0

хорошо сделано для 'ii' и' jj', хотя я никогда не использую их сам, я всегда забываю напомнить людям, что они не рекомендуются. – Hoki

+0

Спасибо, понял. Спасибо за указателей! –

0

двумя способами:

1) Для того, чтобы предварительно выделить как сказал @Shai:

M = zeros(4); 
for ii=1:4; 
    for jj=1:4; 
     M(ii,jj)=mean2(C{ii,jj}) 
    end 
end 

2) Чтобы добавить к предыдущему элементу массив

M = []; 
for i=1:4; 
for j=1:4; 
M=[M;mean2(C{i,j})]; 
end 
end 

Способ 1 определенно лучше. Но хотел сообщить вам, что есть два метода.