How to combine the elements of several identical cell structure ?
1 view (last 30 days)
Show older comments
I have 100 .mat files each containing a cell structure "Tau" with components "Tau.n" and "Tau.u", each component is an array of size 1000*5*11.
I would like to combine the data from all these .mat files such that we could generate one .mat file that now has a cell structure "Tau" with components "Tau.n" and "Tau.u" of size 100000*5*11
What would be the easiest way to do this ? For eaxample I have attached four .mat files. In this case the cell components "Tau.u" and "Tau.n" each becomes an array of size 4000*5*11.
2 Comments
Joe Yeh
on 3 Oct 2016
The data contained in the mat file does not match your description. Can you update either your question or the mat files ?
Accepted Answer
Joe Yeh
on 3 Oct 2016
Edited: Joe Yeh
on 3 Oct 2016
Ok. Here's a solution for you :
Tau = struct;
for ii = 0:9
data = load(['Tau@09_n1000_c', num2str(ii), '.mat']);
if ii == 0
Tau.u = data.Tau.u;
Tau.n = data.Tau.n;
else
Tau.u = cat(4, data.Tau.u);
Tau.v = cat(4, data.Tau.n);
end
end
save('Tau_concatenated.mat')
More Answers (1)
Guillaume
on 3 Oct 2016
Note: there is no cell array in your mat files, just a scalar structure.
Here is how I'd solved your problem:
srcdir = 'C:\somewhere\where\mat\files\are'
mfiles = dir(fullfile(srcdir, 'tau*.mat'));
mfiles = {mfiles.name};
mfilecontent = cellfun(@(fname) load(fullfile(srcdir, fname)), mfiles, 'UniformOutput', false);
temptau = [mfilecontent{:}]; %convert cell array into structure with field Tau
temptau = temptau.Tau; %convert structure of structures into a 1x100 structure
Tau.u = vertcat(temptau.u); %concatenate u field
Tau.v = vertcat(temptau.v); %concatenate v field
0 Comments
See Also
Categories
Find more on Structures in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!