How to process multiple dot mat file using for loop
显示 更早的评论
Hello every one, please help me in solving this issue
I have thousands of mat files as shown in figure for sample. Each mat file contains a variable called ‘val’ which is 2 by 19000 matrices. What I need is to extract the first raw of ‘val’ of each dot mat file and save it by naming sequentially like “x1, x2, x3……..” Using for loop.
I have done for a single file successfully by the following algorithm 

>> clear all
>> load('dist (1).mat')
>> x = val(1,:);
>> save('x1.mat', 'x')
I have attached some of the dot mat files
Thanks so much in advance for your help
回答(1 个)
David Fletcher
2021-5-24
Wouldn't it be better to extract what you want into a single matrix and then just save the one matrix with all the data rather than having thousands of separate files? Having said that, a basic framework for doing what you want is:
clear
numberOfFiles= %enter number of files;
for iter=1:numberOfFiles
fName=sprintf('dist (%d).mat',iter);
x=load(fName);
x=x.val(1,:);
fName=sprintf('x%d.mat',iter);
save(fName, 'x');
end
5 个评论
Yared Daniel
2021-5-24
David Fletcher
2021-5-24
编辑:David Fletcher
2021-5-24
Assuming all the matrices are have the same number of columns, you can put everything into one matrix with each row being a separate data file
clear
numberOfFiles= %enter number of files;
for iter=1:numberOfFiles
fName=sprintf('dist (%d).mat',iter);
x=load(fName);
allData(iter,:)=x.val(1,:)
end
save('data.mat', 'allData.mat')
If the size of the matrices are not the same you would have to use a cell array rather than a matrix
Yared Daniel
2021-5-24
编辑:Yared Daniel
2021-5-24
David Fletcher
2021-5-24
clear
numberOfFiles= %enter number of files;
for iter=1:numberOfFiles
fName=sprintf('dist (%d).mat',iter);
x=load(fName);
allData{iter}=x.val(1,:)
end
save('data.mat', 'allData.mat')
Yared Daniel
2021-5-24
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!