How do I Average across structure

10 views (last 30 days)
Rene Sebena
Rene Sebena on 29 Aug 2018
Answered: Image Analyst on 30 Aug 2018
I have a 14 subject structure (ERP_data.ERP_data); for each subject there is 3D matrix: 32(electrode) x 381(data) x 32(condition); I would like to average the data across subjects with nanmean, so the final matrix will be 32x381x32; thank you for you help!
Rene Sebena
Rene Sebena on 29 Aug 2018
Sorry, but datafile is too big to can see the structure of that file on the picture.

Sign in to comment.

Accepted Answer

Jacob Ward
Jacob Ward on 29 Aug 2018
Here's a possible solution I used to solve your problem:
clear; close all;
% This part just creates dummy data similar to yours with the same structure
ERP_data(14) = struct('ERP_data',0);
for n = 1:14
ERP_data(n) = struct('ERP_data',rand(32,381,32));
averagedData = zeros(32,381,32); % Initializes final matrix
for n = 1:32
for m = 1:381
for o = 1:32
dataToAverage = zeros(14,1); % Initializes vector to average
for p = 1:14
dataToAverage(p) = ERP_data(p).ERP_data(n,m,o); % Grabs the data point from each subject for the position given by m,n, and o
averagedData(n,m,o) = nanmean(dataToAverage); % Averages those points and then assigns that value to the position given by m,n, and o in the final matrix
Hope that helps!
  1 Comment
Rene Sebena
Rene Sebena on 29 Aug 2018
Thanks a lot! This is what I did meanwhile, and it is also working:
GA_ERP_cue = []; for ch = 1:32 GA_ERP_cue_temp = nanmean([ERP_data(1).ERP_data(ch,:,:); ERP_data(2).ERP_data(ch,:,:); ERP_data(3).ERP_data(ch,:,:); ERP_data(4).ERP_data(ch,:,:); ERP_data(5).ERP_data(ch,:,:); ERP_data(6).ERP_data(ch,:,:); ERP_data(7).ERP_data(ch,:,:); ERP_data(8).ERP_data(ch,:,:); ERP_data(9).ERP_data(ch,:,:); ERP_data(10).ERP_data(ch,:,:); ERP_data(11).ERP_data(ch,:,:); ERP_data(12).ERP_data(ch,:,:); ERP_data(13).ERP_data(ch,:,:); ERP_data(14).ERP_data(ch,:,:)]); GA_ERP_cue(ch,:,:) = GA_ERP_cue_temp; end

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 30 Aug 2018
You can use mean() with the 'omitnan' option.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!