現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
how to average multiple folders with multiple files. I am attaching three folders with two files each. I need a help to find an average of two files from three folders. My code is showing an error"Dot indexing is not supported for variables "
2 ビュー (過去 30 日間)
古いコメントを表示
MS
2020 年 3 月 30 日
close all
clear all
D = 'D:\filename\';
S = dir(fullfile(D,'*'));
N = setdiff({S([S.isdir]).name},{'.','..'}); % list of subfolders of D.
for ii = 1:numel(N)
T = dir(fullfile(D,N{ii},'*')); % improve by specifying the file extension.
C = {T(~[T.isdir]).name}; % files in subfolder.
for jj = 1:numel(C)
F = fullfile(D,N{ii},C{jj})
fprintf('test%s\n',F);
S(ii).data = F(:);
end
end
Y = cat(3,S(:))%this line is wrong
out = mean(Y,3)
3 件のコメント
MS
2020 年 3 月 30 日
Thanks. I need two files(test_001.txt, test_002,txt) from all three folders(out of six files) finally. let me know if you need further clarifications.
MS
2020 年 3 月 30 日
code through N(here 3 folders) different folders with M(two files here) different.txt files(text001.txt.....text002.txt) with (O rows and P columns). and find the average(text001.txt.....text002.txt)of M different files from the N folders.
採用された回答
Ameer Hamza
2020 年 3 月 30 日
Create a script in the same directory where you have folders T1, T2, and T3. Then paste the following code in that script and run it
files = dir('**/*.txt');
data = cell(1, numel(files));
for i=1:numel(files)
filename = fullfile(files(i).folder, files(i).name);
data{i} = readmatrix(filename);
end
M = cat(3, data{:});
average_val = mean(M, 3);
22 件のコメント
MS
2020 年 3 月 30 日
Thanks for the answer. Your code does the average of all six files all together. But, I need you to help me to get avearge of test_001.txt from all three folders and text_002.txt for all three folders and give it as two diffrent files(avg_value1.txt, averagevalue2.txt.).
Ameer Hamza
2020 年 3 月 30 日
編集済み: Ameer Hamza
2020 年 4 月 4 日
In that case, try this
files = dir('**/*.txt'); % get names of all the files recursively.
% get the location of current directory to exclude all the files in it
current_dir = pwd;
idx = strcmp(current_dir, {files.folder});
files(idx) = []; % remove the files in current directory from the list
% place all the files with same name in a group
grps = findgroups({files.name});
filegrps = splitapply(@(x) {x}, files, grps');
avg_mat = cell(1,numel(filegrps));
for i=1:numel(filegrps)
grp = filegrps{i};
data = [];
for j=1:numel(grp)
filename = fullfile(grp(j).folder, grp(j).name); % construct the full path of the files
if isempty(data)
data = readmatrix(filename);
else
data = data + readmatrix(filename); % read the matrix and add to previously available values
end
end
avg_mat{i} = data/numel(grp); % calculate the aerage.
end
for i=1:numel(avg_mat)
figure();
axes();
hold on
view(3)
x = avg_mat{i}(:,1);
y = avg_mat{i}(:,2);
u = avg_mat{i}(:,3);
v = avg_mat{i}(:,4);
plot3(x, y, u, '+');
plot3(x, y, v, '*');
legend({'u', 'v'});
writematrix(avg_mat{i}, ['avg_val_' num2str(i)]);
end
Ameer Hamza
2020 年 3 月 30 日
OP's comment moved here:
Many thanks. This code is givng me four files instead of two files for some reason, Can you please check this.
Ameer Hamza
2020 年 3 月 30 日
Check the update code. It will only create 4 files after you run the code 2nd time, because new there are two new txt file. I have updated the code to exclude those files.
MS
2020 年 3 月 31 日
thanks. is there way to save all the average files output as mat files. Sorry, i am asking too much. kindly let me know if you can.
Ameer Hamza
2020 年 3 月 31 日
Yes it can be done by just changing the last for loop
for i=1:numel(avg_mat)
Avg_mat = avg_mat{i};
save(['avg_val_' num2str(i)], 'Avg_mat');
end
Ameer Hamza
2020 年 3 月 31 日
You can add as many line as you want like this:
for i=1:numel(avg_mat)
Avg_mat = avg_mat{i};
name = ['avg_val_' num2str(i)];
writematrix(Avg_mat, name); % .txt
save(name, 'Avg_mat'); % .mat
dlmwrite([name '.dat'], Avg_mat); % .dat
end
Ameer Hamza
2020 年 3 月 31 日
Maybe try this: https://www.mathworks.com/learn/tutorials/matlab-onramp.html. This is a tutorial created by Mathworks and gives a brief overview of basics on MATLAB.
MS
2020 年 4 月 3 日
@Ammer Hamza, I request you to please check and modify the code. The current code is giving the answer as first folder files instead of averaging the three folder files.
Ameer Hamza
2020 年 4 月 4 日
There were a few mistakes in my code. Please check the updated code in the second comment of this answer.
MS
2020 年 4 月 4 日
Many Thanks. you have been really helpful to me. Now, the code works fine. I request you to comment the code. It will be helpful for everyone to learn from your thought process. if you can Please add a code to plot the average output files.
Ameer Hamza
2020 年 4 月 4 日
Please see the updated code. there are four column in your matrix. It will plot each column as a seperate line.
MS
2020 年 4 月 4 日
Thanks for commenting the code . The first two columns of the files are x,y axis and the next two columns are the data. is there a way to mention it in the code and plot it.
MS
2020 年 4 月 4 日
Thanks, plot the figure as mentioned below
first columsn = x axis
second columsn = y axis
third column = u(x,y)
fourth column = v(x,y)
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で File Operations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
アジア太平洋地域
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)