Accessing elements in a structure

1 回表示 (過去 30 日間)
C.G.
C.G. 2021 年 7 月 27 日
編集済み: Stephen23 2021 年 7 月 27 日
I have 2 matlab files, both containing 2 elements: velocity and points.
i have loaded these two files into a structure, but now I want to access each individual field in the velocity column and do some calculations in it (e.g. work out the mean value).
I am struggling to access each field, could anybody help me please?
file = dir('*.mat');
num_files = length(file);
[~, index] = natsort({file.name});
filelist = file(index);
out = load(filelist(1).name);
for k = 1:numel(filelist)
out(k) = load(filelist(k).name);
end
  1 件のコメント
Stephen23
Stephen23 2021 年 7 月 27 日
編集済み: Stephen23 2021 年 7 月 27 日
Unless you have a good reason for using NATSORT you should probably use NATSORTFILES:
which lets you write simpler code by directly sorting the output from DIR:
P = 'absolute or relative filepath to where the files are saved';
S = dir(fullfile(P,'*.mat'));
S = natsortfiles(S); % <------- much simpler!
for k = 1:numel(S)
F = fullfile(P,S(k).name)
... etc
end

サインインしてコメントする。

採用された回答

KSSV
KSSV 2021 年 7 月 27 日
編集済み: KSSV 2021 年 7 月 27 日
file = dir('*.mat'); %fine all the .mat files
num_files = length(file); %record how many files have been found
[~, index] = natsort({file.name}); %sort the files into order
filelist = file(index);
GTav = zeros(numel(filelist),1)
for k = 1:numel(filelist)
load(filelist(k).name); % I hope the structure is named out in every file
% For each cell in the velocity column of the structure
v1 = vel ;
%1. calculate the resultant velocity of each particle
ResV = sqrt((v1(:,1).^2) + (v1(:,2).^2) + (v1(:,3).^2));
%2. calculte the mean resultant velocity of all the particles
ResVav = mean(ResV);
%3. calculate the granular temperature of all the particles
GT = ResV-ResVav;
%4. calculate the average granular temperature for each field
GTav(k) = mean(GT);
end
  10 件のコメント
C.G.
C.G. 2021 年 7 月 27 日
Thank you so much for your help.
Stephen23
Stephen23 2021 年 7 月 27 日
編集済み: Stephen23 2021 年 7 月 27 日
Note that KSSV's answer loads directly into the workspace, which is not recommended.
You can make your code more robust by loading into an output variable (which is a scalar structure):
out = load(..);
out.vel

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeStructures についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by