How to accumulate values from time 1 to the last time
Show older comments
I have more than 10000 files and I want to accumulate the values of given variable between all these times and then plot it on a single image. How can I do it? The files are 1000x1000 matrices.
2 Comments
Let's just suppose, to keep things easy for understanding, that you only have two files, and each one has a 3x3 matrix. Suppose those two matrices are
M1 = magic(3)
M2 = magic(3) + 17
What exactly should the output be?
Also, what is the file type? Excel, CSV, MATLAB mat file?
pink flower
on 26 Sep 2021
Answers (2)
Sulaymon Eshkabilov
on 23 Sep 2021
Here is one of the possible routines to read all 1e4 files and collect all data into a signle variable and the rest is relatively simple:
clearvars
FILE = fullfile('C:\Users\...', '*.txt'); % Directory where the files are residing. Your data file extension, e.g.: .txt, .xlsx, .csv, etc
LIST = dir(FILE);
N = length(LIST); % N = 1e4 as you stated that 1e4 files
D = zeros(1e3, 1e3, N);
for ii = 1 : N
FFName = fullfile(LIST(ii).folder, LIST(ii).name);
DATA = readmatrix(FFName);
D(:, :, ii) = DATA; % NOW D contains all data from 10000 files
end
... % Select and process the part of D that is necessary
2 Comments
pink flower
on 26 Sep 2021
Sulaymon Eshkabilov
on 26 Sep 2021
These are not coding problems but rather memory problems. That means either you should process your data chunk by chunk or increase the memory in your matlab settings.
Stephen23
on 26 Sep 2021
P = 'absolute or relative path to where the files are saved';
S = dir(fullfile(P, '*.txt')); % Select the file extension to suit your data files
M = 0;
for k = 1:numel(S)
F = fullfile(P, S(k).name);
M = M + readmatrix(F);
end
6 Comments
pink flower
on 26 Sep 2021
"Undefined function or variable 'readmatrix'."
In future please select your MATLAB release when asking a question.
" Is it possible to change this code and adapt it?"
Of course, just replace READMATRIX with whatever code you use to import your matrices with.
pink flower
on 26 Sep 2021
Stephen23
on 26 Sep 2021
"But the points that have NaN are not entering the sum"
It is not clear to me what that means. Please give an example of what occurs, and what you want to occur.
pink flower
on 26 Sep 2021
To ignore NaN when summing you can use SUM with the appropriate flag, e.g.:
M = zeros(1000,1000);
for k = 1:numel(S)
F = fullfile(P, S(k).name);
N = whateverCodeYouUseToImportYourFileData;
M = sum(cat(3,M,N),3,'omitnan');
end
Categories
Find more on Standard File Formats in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!