Mean of many changing "for loop" 3D matrices
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Patricia Klobusiakova
el 29 de Oct. de 2016
Comentada: Patricia Klobusiakova
el 30 de Oct. de 2016
Hi,
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
end
mean()
Can you help me please?
Thanks.
3 comentarios
Respuesta aceptada
dpb
el 30 de Oct. de 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
end
M=M/200; % average
Más respuestas (1)
Kwin
el 30 de Oct. de 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:
mean(M,location_of_k)
so for example for M(:,:,:,k), location_of_k=4 and for M(k,:,:,:), location_of_k=1.
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!