带有零填充数字的Matlab文件名

Mai*_*Mai 4 matlab string-formatting

我有11×11的矩阵,我救了他们的.mat文件从F01_01F11_11.我必须Func在每个文件上运行一个函数.由于需要很长时间,我想编写一个脚本来自动运行该功能:

for i=01:11  
    for j=01:11  
        filename=['F',num2str(i), '_', num2str(j),'.mat'];  
        load(filename);  
        Func(Fi_j);   % run the function for each file  Fi_j  
    end  
end  
Run Code Online (Sandbox Code Playgroud)

但它不起作用,Matlab无法找到mat文件.
有人可以帮忙吗?

Sha*_*hai 10

问题

i=01; 
j=01; 
['F',num2str(i), '_', num2str(j),'.mat']
Run Code Online (Sandbox Code Playgroud)

评估为

F1_1.mat

而不是

F01_01.mat

正如所料.

原因是它i=01是一个双重类型赋值并且i等于1- 这些类型的变量没有前导零.

一个办法

问题的可能解决方案是

for ii = 1:11
    for jj= 1:11
        filename = sprintf('F_%02d_%02d.mat', ii, jj );
        load(filename);  
        Func(Fi_j);   % run the function for each file  Fi_j  
     end  
end
Run Code Online (Sandbox Code Playgroud)

几条评论:

  1. 注意使用sprintf格式化double iijj使用前导零%02d.

  2. 您可以使用第二个参数num2str来格式化其输出,例如:num2str(ii,'%02d').

  3. 在处理字符串时使用字符串格式化工具是一种很好的做法.

  4. 在matlab中更好的做法是使用ij作为循环计数器,因为它们在matlab中的默认值是sqrt(-1).