How can I load multiple dat files of different name pattern and from different directory consecutively to do something

2 visualizzazioni (ultimi 30 giorni)
Hi, I have some dat files of row*Column( 9999*10 )of names:
dir1/a_0.1_1
dir1/b_0.1_2
dir1/c_0.3_1
dir1/c_1.5_1
dir2/a_0.1_1
dir2/a_0.5_1
Now How can I load and recall then sequentially to do something? is there any short cut for loop for this specially when they are in different folder? Thank you

Risposta accettata

Ameer Hamza
Ameer Hamza il 16 Mag 2018
You can use this FEX submission. Download it and place it in MATLAB path. To get the list of all .dat files, use it as follow
files = subdir('*.mat');
this will work, if you are present in the top folder of dir1, dir2 etc. This will give you name and path of all the '.dat' files in the subfolder. Then read and process like this
data = cell(1, length(files))
for i=1:length(files)
filename = files(i).name;
% load your file here, use load(), tableread() or any appropriate function depending on the type of data in .dat files
data{i} = readData; % save your read data or do any other processing
end
  7 Commenti
Ameer Hamza
Ameer Hamza il 21 Mag 2018
You are welcome. Yes, I noticed that your code requires huge memory several 10s of GBs. I would have taken a long time. You can further decrease time by making interpolation resolution of 10^8 to smaller values, but this depends on your requirement
Ameer Hamza
Ameer Hamza il 21 Mag 2018
In case you haven't noticed, the 2 lines at end should be
ave_time_extr = ave_time/length(files);
ave_radius_extr = ave_radius/length(files);
I forget to change those lines. Therefore right now you are just adding all the columns of X and Y. To get mean value, you need to divide them with length(files).

Accedi per commentare.

Più risposte (5)

az
az il 22 Mag 2018
Yes Mr. Hamza you are exactly right. Now on the first day you advised to download this FEX submission if in case .dat files are in different folder. I have downloaded FEX but do not know how to put that code on the MATLAB path. I have to spent lot of time just to bring the files in the same folder then execute your code. Your code is excellent for this job, but the .dat files that I have being generated in a computer cluster where they all came with the same name 'event_time'. So when I try to put them in one folder to plot in MATLAB I have to change their name every time or they overwrite. So It would be quite robust if I could load the .dat files from different sub-folders keeping the code in the main folder. Thank you very much.
  3 Commenti
az
az il 22 Mag 2018
Wow!! It works like a magic. Thank you so much Mr. Hamza.
Had I knew this or when first time you mention about this if then I would understood this then It save me a lot of time. Now it seems I am learning something about matlab.
Now one last question, in line 89 where you put this command
index = find(isinf(x)); x(index) = x(index-1);
it works much better, but the reason I used this to avoid the inf from data as interpolation does not work if there are NAN, Inf, and same repetitive value in consecutive row. is there any general command to avoid that type of data value from the table entirely so that the row number remain the same for all the column.
Ameer Hamza
Ameer Hamza il 22 Mag 2018
For NaN you can use fillmissing() to replace values. Since you also want to deal with inf in the same way, so first replace all inf with NaN and then use fillmissing(). For example
x = [1 2 inf 8 9 nan 15];
x(isinf(x)) = nan;
fillmissing(x, 'linear') % using linear will avoid repeated values.
ans =
1 2 5 8 9 12 15

Accedi per commentare.


az
az il 23 Mag 2018
Thank you Mr. Hamza it is working.

az
az il 23 Mag 2018
Hello Mr. Hamza, one thing, In your corrected code if in line 98 instead of "interploation_points' if I decide to use m1 values of line 92, then it gives me unequal row length among 20 interpolation X Y pairs after interpolation has been done. the problem is then matlab can not take average of columns with unequal row length.
Is there any how it can be done in matlab with unequal matrix dimension? If not then by putting zeros on that rows which comes shorter_length than others. So basically then making the matrix of dimension of the max length row with a code and filled other shorter row length with zeros.

az
az il 23 Mag 2018
In this attachment the value of 'm' that I am using to interpolate in line 34. Now everything remain as of your corrected code just instead of interploation_points I am using m values. now m is changing as every data has been loaded. So at the end ave_time and ave_radius is not calculated as the because of variable m the interplotion points are different and so every X Y pair has different row length.

az
az il 23 Mag 2018
I am sending the whole folder with the code and files. Thank you
  4 Commenti
Ameer Hamza
Ameer Hamza il 23 Mag 2018
No, You must have all columns of equal length to take mean. Mean will only make sense if all columns have equal lengths. That is why you need to use fixed interpolation.

Accedi per commentare.

Categorie

Scopri di più su Performance and Memory in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by