For loop to store one matrix from multiple files to a structure

조회 수: 2 (최근 30일)
John Kim
John Kim 2023년 2월 17일
댓글: Stephen23 2023년 2월 21일
Hello everyone,
I am trying to create a for-loop to go through multiple files store a single matrix from each file into a structure.
The code I am currently using allows me to pull the necessary matrix but will not store them all into one structure
cd 'C:\Users\Document\Data'
a = dir('*.mat');
b = 1;
filename = a(b).name;
for i=1:size(a,1)
tempdata = importdata(filename);
all_new = tempdata.results;
b = b+1;
end
By the end, I am hoping to have a structure that contains the matrix "tempdata.results" from all the files in 'C:\Users\Document\Data'.
Thank you!

채택된 답변

Walter Roberson
Walter Roberson 2023년 2월 17일
projectdir = 'C:\Users\Document\Data';
dinfo = dir(fullfile(projectdir, '*.mat'));
filenames = fullfile( {dinfo.folder}, {dinfo.name});
numfiles = length(filenames);
all_new(numfiles,1) = struct('results',[]); %pre-allocate
for K = 1 : numfiles
tempdata = load(filenames{K}, 'results'); %should contain only results
all_new(K) = tempdata;
end
It would probably be more common to use a cell array than a struct array, but you specifically asked for a structure.
In the case where the arrays are all the same size, you can often gain performance advantages by using a multidimensional array of data instead of a cell array or struct array.
  댓글 수: 2
John Kim
John Kim 2023년 2월 20일
Thank you very much!
It worked perfectly.
Could you elaborate on what you mean by multidimensional array?

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Stephen23
Stephen23 2023년 2월 18일
편집: Stephen23 2023년 2월 18일
P = 'C:\Users\Document\Data';
S = dir(fullfile(P,'*.mat'));
for k = 1:numel(S)
F = fullfile(S(k).folder,S(k).name);
S(k).data = load(F);
end
out = [S.data] % one structure

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by