首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带补零数字的Matlab文件名

带补零数字的Matlab文件名
EN

Stack Overflow用户
提问于 2013-01-08 18:57:39
回答 3查看 6.8K关注 0票数 4

我有11x11矩阵,我将它们作为.mat文件从F01_01保存到F11_11。我必须在每个文件上运行一个函数Func。由于这需要很长时间,所以我想编写一个脚本来自动运行函数:

代码语言:javascript
运行
复制
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文件。

有人能帮帮忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-08 19:33:02

问题所在

代码语言:javascript
运行
复制
i=01; 
j=01; 
['F',num2str(i), '_', num2str(j),'.mat']

计算结果为

F1_1.mat

而不是

F01_01.mat

不出所料。

原因是i=01是双类型赋值,而i等于1 -这些类型的变量没有前导零。

一种解决方案

这个问题的一个可能的解决方案是

代码语言:javascript
运行
复制
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 来格式化 double ii jj 并使用 %02d 前导零。
  2. 您可以使用 num2str 的第二个参数来格式化其输出,例如:num2str(ii,'%02d')
  3. 在处理字符串时使用string formatting工具是一种很好的做法。
  4. 在 matlab 中最好not to use i and j as loop counters,因为它们在 matlab 中的默认值为 sqrt(-1)
票数 10
EN

Stack Overflow用户

发布于 2013-01-08 21:32:59

这里是另一个解决方案,请注意,@Shai的解决方案更容易扩展到多位数,但这个解决方案对字符串格式的理解较少。

代码语言:javascript
运行
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2014-05-27 22:12:37

num2str可以执行补零操作来填充该字段。在下面的示例中,4是所需的字段width+1。

代码语言:javascript
运行
复制
num2str(1,'% 04.f')

Ans = 001

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14213442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档