2013-06-10 5 views
0

У меня есть структура с именем «данные» со 100 статьями, каждая из которых соответствует участнику из эксперимента. Каждый из 100 записей содержит несколько матриц 6x6, дающих разные значения.Matlab: Структура с матрицами 6x6 - как получить среднее значение по группе

Например, пример матрицы из моего первого участника:

data.p001.matrixCB 

    18.9737 17.0000 14.2829 12.4499 11.7898 10.0995 
    18.1384 16.0000 13.4907 11.7898 11.2250 10.3441 
    14.7986 12.5300 11.7898 11.7473 12.2066 9.3808 
    14.3527 13.4536 12.9615 13.3417 12.7279 11.7047 
    18.0278 17.8885 17.6068 17.4642 17.1464 16.6132 
    24.1661 24.7790 23.7697 23.3880 22.6495 23.8537 

... и это один из 100 записей в структуре с подобной установкой.

Я хотел бы получить среднее среднее значение для каждой ячейки в матрице у моих 100 участников. Поэтому у меня будет среднее значение для 100 значений в позиции matrixCB (1,1) и всех других позиций в матрице. К сожалению, я не вижу, как это делается, а вспомогательные функции менее полезны. Будем очень благодарны любой помощи!

ответ

1

Вы можете суммировать всю свою 100-матрицу в Sum, а затем разделить ее на 100 - Sum./100, а затем каждая ячейка будет представлять avg всех 100 ячеек по каждому индексу.

Например -

Sum = A + B ; 
Sum./2 ; 
1

Структуры могут быть боль. Чтобы не вводить связку кода, вы могли бы принять следующий подход:

  1. Преобразовать требуется матрицы в элемент массива
  2. Перерисуйте массив ячеек в 3D матрицу
  3. Compute означает, по 3-е измерение

Код для этого:

Mcell = arrayfun(@(x) data.(sprintf('p%03d',x)).matrixCB, 1:100, 'uni', 0); 
M = mean(reshape(cell2mat(Mcell), 6, 6, []), 3);