Mean of many changing "for loop" 3D matrices
1 visualizzazione (ultimi 30 giorni)
Patricia Klobusiakova il 29 Ott 2016
I have 200 3D matrices with same dimensions. I'd like to create one 3d matrix that would contain mean of my 200 matrices by elements → (1,1,1) mean of 200 positions in my 3D matrices and so on ...
Here's my code:
for tt = 1:200;
M = ... (tt) loads the 3D data
Can you help me please?
dpb il 30 Ott 2016
Well, you could do that (store in a 4D array, that is) but that requires memory for all 200 at once and there's no need when computing a mean to have all the data at once...just accumulate the totals and then divide after the loop is finished...
M = spm_read_vols(spm_vol(files(1).name)); % read the first into accumulator array
for tt = 2:200
M=M+spm_read_vols(spm_vol(files(tt).name)); % accumulate the total
M=M/200; % average
Più risposte (1)
Kwin il 30 Ott 2016
If you have your matrices all stored in one (four dimensional) matrix, for example M(:,:,:,k) would return the kth 3D matrix, but another order of the index would be fine as well, such as M(k,:,:,:), then, as dpb already mentioned, you can get the mean by simply using:
so for example for M(:,:,:,k), location_of_k=4 and for M(k,:,:,:), location_of_k=1.