How do I concatenate 3D arrays from multiple .mat files?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Thaís Fernandes
am 27 Jul. 2018
Kommentiert: Daianne Hofig
am 1 Dez. 2018
I have 360 archives.mat, each with a variable 'A', of size 1800x400x1. I would like to concatenate these arrays in the third dimension, ie I would like an 'A1' of size 1800x400x360. For this I tried two things: 1) I used the 'cat' command (as in the code below), but it just saved the last array:
d=dir('test/*.mat');%test is the name of my directory where these files are stored
nn=length(d);
A1=[];
for ii=1:nn
eval(['load teste/',d(ii).name])
disp(d(ii).name)
A1=cat(3,A);
end
2) I tried to use [], but it only concatenates in the first or second dimension:
d=dir('test/*.mat');
nn=length(d);
A1=[];
for ii=1:nn
eval(['load test/',d(ii).name])
disp(d(ii).name)
A1=[A1;A];
end
Anyone have any suggestions on how to solve this? Thanks.
1 Kommentar
Akzeptierte Antwort
Walter Roberson
am 27 Jul. 2018
A1 = cat(3, A1, A);
but you could also use
A1(:,:,ii) = A;
and you could pre-allocated, like
d=dir('test/*.mat');%test is the name of my directory where these files are stored
nn=length(d);
for ii=1:nn
eval(['load teste/',d(ii).name])
disp(d(ii).name)
if ii == 1
A1 = zeros(size(A,1), size(A,2), nn);
end
A1(:, :, ii) = A;
end
However, you should avoid using eval:
projectdir = 'test';
d = dir( fullfile(projectdir, '*.mat') );
nn = length(d);
for ii=1:nn
load( fullfile(projectdir, d(ii).name) )
disp(d(ii).name)
if ii == 1
A1 = zeros(size(A,1), size(A,2), nn);
end
A1(:, :, ii) = A;
end
and you should avoid using load() without any output:
projectdir = 'test';
d = dir( fullfile(projectdir, '*.mat') );
nn = length(d);
for ii=1:nn
datastruct = load( fullfile(projectdir, d(ii).name), 'A' );
A = datastruct.A;
disp(d(ii).name)
if ii == 1
A1 = zeros(size(A,1), size(A,2), nn);
end
A1(:, :, ii) = A;
end
7 Kommentare
Walter Roberson
am 30 Jul. 2018
I thought that was what my code did? What changes did you have to make?
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!