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

时间:2013-01-08 10:57:39

标签: matlab string-formatting

我有11x11矩阵,我将其保存为.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  

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

3 个答案:

答案 0 :(得分:10)

问题

i=01; 
j=01; 
['F',num2str(i), '_', num2str(j),'.mat']

评估为

  

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

几条评论:

  1. 请注意使用sprintf格式化双iijj使用%02d的前导零。

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

  3. 在处理字符串时,最好使用string formatting工具。

  4. 这是matlab not to use i and j as loop counters中的一种更好的做法,因为它们在matlab中的默认值是sqrt(-1)

答案 1 :(得分:1)

这是一个替代解决方案,请注意@ Shai的解决方案更容易扩展到多个数字,但这一点需要较少了解字符串格式。

for i=1:11  
        for j=1:11  
            filename=['F',num2str(floor(i/10)),num2str(mod(i,10)) '_', num2str(floor(j/10)),num2str(mod(j,10)),'.mat'];  
            load(filename);  
            Func(Fi_j);   % run the function for each file  Fi_j  
       end  
end 

答案 2 :(得分:1)

num2str可以执行zeropadding来填充字段。在下面的示例中,4是所需的字段宽度+ 1。

num2str(1,'% 04.f')

Ans = 001