- you use nested loops, but never use the outer loop variable i anywhere useful, so it just repeats exactly the same thing 24 times.
- the loop variable i remains totally unused here: sprintf('ii_Sub*.mat',i). There is nothing in that formatting string that uses any input variable.
- The call mean(a,24) makes no sense: a is a cell array, so taking mean of it is not defined. Even if it did work your array have 24 dimensions, so telling MATLAB to sum over the 24th dimension (which will be singular) serves no purpose whatsoever.
How can I get an average of different matrices stored as separate .mat files?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Native
il 13 Nov 2018
Commentato: João Vítor Batista Pires Santos
il 20 Lug 2021
I have 24 different matrices of dimension 68X68, stored in a folder. I need to create a new matrix that is an average of all those matrices. Using previous FAQ from this forum, I tried :
Num = 24
for i = 1:Num
files = dir(sprintf('ii_Sub*.mat',i))
for k = 1:length(files)
fprintf('Current file : %s\n', files(k).name)
a = load(files(k).name)
meanmatrix = mean(a,24)
end
end
This is creating a 1X1 struct only, while the mean command shows an error as well. How best can I go about it?
3 Commenti
Risposta accettata
Stephen23
il 13 Nov 2018
Modificato: Stephen23
il 13 Nov 2018
Assuming that each file contains exactly one variable (a matrix) and that all matrices are the same size and type:
S = dir('*.mat');
N = numel(S);
C = cell(1,N);
for k = 1:N
T = load(S(k).name)
C(k) = struct2cell(T);
end
M = cat(3,C{:})
mean(M,3)
9 Commenti
Stephen23
il 20 Lug 2021
@João Vítor Batista Pires Santos: you could try something like this:
for k = 1:N
C{k} = ncread(S(k).name,'PRMSL_L101'); % PRMSL_L101 = Pressure (17x17x4)
end
A = cat(4,C{:});
M = mean(A,4)
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!