How to import multiple .mat files to workspace?

7 views (last 30 days)
Hi,
As cited above, I'm trying to import multiple .mat files (total 72 no. of .mat files) which are at the location as in the code below. However the code doesn't import the files to the workspace and throws error as below.
files = dir('D:\Rahul\Data_tokamak\data&plot\data_paper1\H-mode data\H-mode bistable model\set1_neoAno_ratio_10\beta0.01\Contourplot\*.mat');
for i=1:length(files)
load(files(i).name,'-ascii');
end
ERROR:
Error using load
with regards,
rc

Accepted Answer

Stephen23
Stephen23 on 28 Apr 2024
Edited: Stephen23 on 30 Apr 2024
The basic problem is that you are not supplying the filepath to LOAD.
You can improve your code as well. I am guessing that you are importing text files of numeric data:
P = 'D:\Rahul\Data_tokamak\data&plot\data_paper1\H-mode data\H-mode bistable model\set1_neoAno_ratio_10\beta0.01\Contourplot';
S = dir(fullfile(P,'*.mat'));
for k = 1:numel(S)
F = fullfile(S(k).folder,S(k).name);
M = readmatrix(F); % better function for importing numeric data from text files
S(k).data = M;
end
All of the imported data is stored in the structure S. For example, the 2nd file:
S(2).name % filename
S(2).data % imported file data
Depending on the content of the MAT files you may be able to concatenate them into one structure array:
A = cat(3,S.data) % optional, all imported data in one array
Note that this approach is much better than LOADing directly into the workspace as you showed in your question.
  3 Comments
Stephen23
Stephen23 on 30 Apr 2024
Edited: Stephen23 on 2 May 2024
"it gives error unable to recognise the data files as below: ERROR: Unrecognized function or variable 'H0_27bi_001'."
In your original code you LOADed all of the data directly into the workspace, apparently giving you lots and lots of numbered variables in the workspace. That is not good data design and should be avoided.
The approach I showed you uses arrays and indexing, which is the recommended approach in MATLAB (rather than having lots and lots of separate variables in the workspace). Of course this also means that you will need to modify the rest of your code to suit, e.g. by referrring to one array instead of lots and lots and lots of separate variables in the workspace (ugh).
That is why I showed you the example of one way to concatenate the data together into one array, which I told you in my answer: "All of the imported data is stored in the structure S."
There is no single solution for processing data which works for all data: it depends entirely on the classes and sizes of your data, which is information you have not told us. So I cannot guess which approach you need, because you have not given us this information. Therefore you will either have to:
  • modify your code yourself, or
  • upload some sample data files by clicking the paperclip button.
Making me guess what data you have is not an efficient way to debug code that you have not shown me.
But because apparently you want me to use my magic crystal ball, lets try this:
P = 'D:\Rahul\Data_tokamak\data&plot\data_paper1\H-mode data\H-mode bistable model\set1_neoAno_ratio_10\beta0.01\Contourplot';
S = dir(fullfile(P,'*.mat'));
for k = 1:numel(S)
F = fullfile(S(k).folder,S(k).name);
M = readmatrix(F);
S(k).data = M(2,1);
end
V = [S.data]
and then you have the (2,1) data in vector V.
Rahul
Rahul on 2 May 2024
Hi Stephen23,
I got your point. Let me rectify the code.
I'll get back to you if I face any issue.
Thanks a lot.

Sign in to comment.

More Answers (1)

Paul
Paul on 28 Apr 2024
Why use the -ascii option to load a .mat file? If that's not the problem, please edit your question by copy/pasting the entire error message.
Depending on what's in the .mat files and how you're planning to process the data, you might want to consider using the output argument of load so that the data from each .mat file is stored in an element of an indexable array.

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!