MatLab: Average (column,row) entry across many different files -> create output file

7 次查看(过去 30 天)
Hi there,
I have many files with an".IV0" ending (this is something similiar to .txt). In each file I have an header of 15 rows. This header should not be aken into account. After the header there are 3 columns (seperated by " " and about 81 rows). What I want to do now is to average e.g. row "16" column "1" of each .IV0 file and make an outputfile, which has 3 columns and about 81 rows and in each (row, column) is the average of all the same (row, column) elements from all the different files.
I have tried what you have said, but don´t really know what to do anymore...Can you help me? This is the code I tried:
folder = 'C:\Users\Averager\';
IV0Files = dir(fullfile(folder, '*.IV0')); % Use absolute path names
numfiles = length(IV0Files);
average1 = zeros(1, numfiles);
average2 = zeros(1, numfiles);
average3 = zeros(1, numfiles);
for k = 1:numfiles
M = csvread(fullfile(folder, IV0Files(k).name));
average1(k) = mean(M(:,1));
%average2(k) = mean(M(:,8));
end
iv0write(fullfile(folder, 'output.IV0'), average1);
  2 个评论
Simon Keegan
Simon Keegan 2020-12-10
编辑:Simon Keegan 2020-12-10
Hi Mathieu,
yes I do have some data (attached). I had to convert them to a txt file in order to upload it. It shouldn´t make a difference, if it is a .IV0 file or a .txt file in the end. i guess.
I already worked on it again and created this:
folder = 'C:\Users\Averager\';
folderout = 'C:\Users\Auswertung\';
IV0Files = dir(fullfile(folder, '*.IV0')); % Use absolute path names
numfiles = length(IV0Files);
%the following should be automatic. I did it manual for two examples to see if it is working in general
M = load(IV0Files(1).name);
A = load(IV0Files(2).name);
average = (M+A)/numfiles;
%this is to save the data in the new IV0 file
iv0write(fullfile(folderout, 'output.IV0'), average);

请先登录,再进行评论。

采纳的回答

Mathieu NOE
Mathieu NOE 2020-12-11
So this is my suggestion
I wonder why we need to average also the 3rd column with is the time values ?? making not much sense IMHO
IV0Files = dir(fullfile(folder, '*.txt')); % Use absolute path names
numfiles = length(IV0Files);
data_sum = 0;
for ci = 1:numfiles
data_file = readmatrix(IV0Files(ci).name,'NumHeaderLines',15);
data_sum = data_sum+data_file; % summation accross the files
end
% divide by numfiles to have the average (and not the sum)
average = data_sum/numfiles;
% %this is to save the data in the new IV0 file
writematrix(average, fullfile(folderout, 'output.txt'))
  4 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by