Extract value from every struct

5 visualizaciones (últimos 30 días)
Monalisa Chikezie
Monalisa Chikezie el 2 de Ag. de 2022
Comentada: Monalisa Chikezie el 9 de Ag. de 2022
I have four 1x1 struct files like the attached. mat file in every 60 subfolder, I want to extract the u field in each struct and assign its name to it. The name is in a field called name e.g, the name of this one is rdf. Then use it as one of the X e.g (model = fitcsvm(X,Y, 'KernelFunction','linear', 'BoxConstraint',1);) for svm classification. where, X= [X1 X2 X3 X4] and X1 is currently rdf. Using a for loop, please how do I extract something from a struct.

Respuesta aceptada

Walter Roberson
Walter Roberson el 4 de Ag. de 2022
Editada: Walter Roberson el 6 de Ag. de 2022
vois={'ldF', 'rdF', 'lvF', 'rvF'};
numvois = length(vois);
basedir = 'place/where/the/folders/are';
foldinfo = dir(basename);
foldinfo(~[foldinfo.isdir]) = []; %remove non-folders
foldinfo(ismember({foldinfo.name}, {'.', '..'})) = []; %remove . and ..
foldernames = fullfile({foldinfo.folder}, {foldinfo.name});
numfolders = length(foldernames);
X_all = cell(numfolders, numvois);
for K = 1 : numfolders
thisfolder = foldernames{K};
[~, basename, ~] = fileparts(thisfolder);
for vidx = 1 : numvois
filename = fullfile(thisfolder, basename + "_" + vidx + ".mat");
Features = load(filename);
X_i = Features.xY.u;
X_all{thisfolder, vidx} = X_i;
end
end
At the end of this, X_all will be a cell array with as many rows as folders (60, you said), and as many columns as vois (4)
  5 comentarios
Walter Roberson
Walter Roberson el 6 de Ag. de 2022
Ah, I fixed it.
Monalisa Chikezie
Monalisa Chikezie el 9 de Ag. de 2022
oh, thanks a lot

Iniciar sesión para comentar.

Más respuestas (2)

Karim
Karim el 2 de Ag. de 2022
Editada: Karim el 2 de Ag. de 2022
You can acces the data in the struct by placing a point after the variable name of the struct, follewed by the fieldname you want to acces. See below for an example for the 'u' variable.
Features = load(websave('myFile', "https://nl.mathworks.com/matlabcentral/answers/uploaded_files/1085720/VOI_rdF_1.mat"));
% first extract xY from 'Features'
xY = Features.xY;
% then extract u from the struct
u = xY.u;
% plot the data
figure
plot(u)
grid on

Monalisa Chikezie
Monalisa Chikezie el 2 de Ag. de 2022
Editada: Walter Roberson el 4 de Ag. de 2022
Hi, thanks for the respnse.
this is what I have so far, but it seems to give an error.
vois={'ldF', 'rdF', 'lvF', 'rvF'};
for j=1:4
Features = load(pwd, '_1.mat'));
X_i=Features.xY.u;
X_all(:)=X_i;
  7 comentarios
Walter Roberson
Walter Roberson el 3 de Ag. de 2022
What was your intention in assigning to X_all(:) ?
Monalisa Chikezie
Monalisa Chikezie el 3 de Ag. de 2022
to capture all of the 4 vois in each of the 60 folders

Iniciar sesión para comentar.

Categorías

Más información sobre Multidimensional Arrays en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by