Automate the opening of .mat files and the aggregation of opened matricies

1 visualización (últimos 30 días)
I wasn't sure how to title this question. It's pretty easy to describe what I'm trying to do, though:
I have 100 .mat files, with names output1.mat through output100.mat. Each of these contains a matrix, with the name of the matrix being matrix1 though matrix100 (output1.mat contains matrix1, output2 contains matrix2, etc.)
I would like to create one matrix "Result" which contains the first column of each of the above matricies. So, column1 would be the first column of matrix1, column2 would be the first column of matrix2, etc.

Respuesta aceptada

Stephen23
Stephen23 el 17 de Jun. de 2016
Editada: Stephen23 el 17 de Jun. de 2016
My code correctly preallocates the output matrix, and does not assume that the matrix is the only variable in the mat file:
%Some fake data:
matrix1 = randi(9,5)
matrix2 = randi(9,5)
matrix3 = randi(9,5)
matrix4 = randi(9,5)
save('output1.mat','matrix1') % better would be to use
save('output2.mat','matrix2') % the same variable name.
save('output3.mat','matrix3')
save('output4.mat','matrix4')
%
% import those |.mat| files:
out = NaN(5,4); % preallocate the output
for k = 1:4
S = load(sprintf('output%d.mat',k));
tmp = S.(sprintf('matrix%d',k));
out(:,k) = tmp(:,1);
end
and tested:
matrix1 =
3 2 5 6 5
3 9 2 7 9
1 2 5 3 3
6 6 3 5 3
8 8 8 4 4
matrix2 =
7 8 2 2 6
6 2 7 6 1
9 6 3 4 7
1 5 2 5 7
5 3 2 8 9
matrix3 =
5 4 1 4 5
6 5 6 3 4
2 3 1 6 5
1 4 9 4 9
6 6 6 4 2
matrix4 =
6 1 4 1 1
9 6 8 4 5
1 9 1 9 5
8 8 3 9 4
5 2 4 4 2
>> out
out =
3 7 5 6
3 6 6 9
1 9 2 1
6 1 1 8
8 5 6 5
Note that this whole thing would be simpler if you had simply named the contents of each .mat file with exactly the same name (e.g. matrix), instead of trying to create lots of numbered variables. Then you could simply use
S.matrix
in the loop.

Más respuestas (1)

Azzi Abdelmalek
Azzi Abdelmalek el 17 de Jun. de 2016
out=[];
for k=1:100
file=sprintf('output%d',k)
M=load(file)
f=fieldnames(M)
A=M.(f)
out=[out A(:,1)]
end

Categorías

Más información sobre Operators and Elementary Operations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by