Load different mat files using for loop

4 vues (au cours des 30 derniers jours)
Iugo
Iugo le 19 Fév 2021
Commenté : Iugo le 20 Fév 2021
Hello guys!! I'm trying to load several subjects from a folder, with the data of those subjects having different mat filenames.
What I have implemented at the moment is this:
DataLocation = 'D:\ABIDEdataset\Outputs\dparsf\nofilt_noglobal\rois_aal\Leuven';
FileType = fullfile(DataLocation, '*.mat');
dirFicheiroMat = dir(FileType);
number_subjects = length(dirFicheiroMat);
for i=1:number_subjects
baseFileName = fullfile(DataLocation, dirFicheiroMat(i).name);
lfp = load(baseFileName);
end
Where lfp variable will be used after, to compute some calculation for each subject iterated.
But the problem of this code lies in the fact that lfp will be a structure after each iteration, and I want that variable to store the "true" values of each subject, instead of a structure...
Can anyone give me any help in this?
Thanks in advance,
Hugo
  2 commentaires
Stephen23
Stephen23 le 20 Fév 2021
" I want that variable to store the "true" values of each subject, instead of a structure..."
Sure.
But mat files can contain any number of variables with any (permitted) names. So far you have not told us how many variables there are in the mat files nor what their names are, which makes it difficult for us to help you.
Iugo
Iugo le 20 Fév 2021
Sorry about that...
So basically in each folder I have several mat files, with these being respective to one subject, and they contain a 2D matrix (between each mat file the size can be different) with the values of fMRI BOLD time-series.
The names of these files are from this type "Leuven10050682roisaal, Leuven20050726roisaal" and so on.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 20 Fév 2021
Assuming that each mat file contains exactly one variable of unknown name, then try this:
D = 'D:\ABIDEdataset\Outputs\dparsf\nofilt_noglobal\rois_aal\Leuven';
S = dir(fullfile(D,'*.mat'););
for k = 1:numel(S)
F = fullfile(D, S(k).name);
C = struct2cell(load(F));
S(k).data = C{1};
end
You can trivially access the file data using indexing, e.g. the second file:
S(2).data
If your mat files actually contain more than one variable then you will need to give us more information: how many, their names, etc.
  6 commentaires
Stephen23
Stephen23 le 20 Fév 2021
Modifié(e) : Stephen23 le 20 Fév 2021
"How can I save each subject's output (which are a structure) in that ConnectivityMatrix_Corr third dimension?"
I don't know, because I have no idea about the structure size, how many fields the structure has, what classes the fields are, or what sizes the fields might have. If at all possible, the answer to your question would be to extract the data from the fields of that structure and allocate them to the desired array.
"Or, if possible, how can I save each field of the structure for every subject in different matrices?"
They already are different matrices, referenced by the fieldname/index of that structure.
Rather than putting the data into one numeric matrix, perhaps using a non-scalar structure might be better:
Iugo
Iugo le 20 Fév 2021
Thank you for your help @Stephen Cobeldick!!
I'll check those files.
Best regards,
Hugo

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by