2016-07-19 4 views
0

У меня есть данные эксперимента в структуре, как это:Нахождения средств из полей в структуру без цикла

data.subject.trial 

Мне нужно найти средства для оценки на испытаниях по всем участникам (например, что является средний балл всех участников в процессе x?).

Я могу добраться туда, используя нижеследующий цикл, но похоже, что для достижения той же цели должен быть более простой однострочный (значения в «пробном») являются числовыми в этом случае). Какие-нибудь советы? Большое спасибо!

for i = 1:length(data.subject) 
    for j = 1:length(data.subject(i).trial) 
     a(i,j) = data.subject(i).trial(j); 
    end 
end 
trialMeans = mean(a); 
+0

По [документации] (http://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-structure-array.html): «Примечание: вы можете индексировать часть поле, только если вы ссылаетесь на один элемент массива структуры. MATLAB® не поддерживает такие выражения, как 'S (1: 2) .X (1: 50,1: 80)', которые пытаются индексировать в поле для несколько элементов структуры ». – excaza

+1

вы в основном делаете среднее из всех испытаний во всех предметах, поэтому вам нужно просто использовать 'cell2mat (struct2cell (data.subject)), а затем взять столбец следов, а затем запустить среднее значение? – GameOfThrows

+0

@GameOfThrows Спасибо за это, но он не совсем работает с моими данными - у меня есть дополнительные подполя с разными типами данных, поэтому он вызывает ошибку. Лучшее решение, которое я нашел, похоже на 'A = cell2mat ({data.subject.trial}); % Положите все оценки из всех проб на 1 вектор B = изменить (A, [], length (data.subject)); % Перестройте в строки любого количества предметов – monkeytennis

ответ

1

Я думаю, что я наткнулся на ответ на свой вопрос ...

A = cell2mat({data.subject.trial}); % Put all scores from all trials into 1 vector 
B = reshape(A,[],length(data.subject))'; % Reshape into rows of however many subjects there are 
trialMeans = mean(B); 

Спасибо!