我有11x11矩阵,我将它们作为.mat
文件从F01_01
保存到F11_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文件。
有人能帮帮忙吗?
发布于 2013-01-08 19:33:02
问题所在
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
几条评论:
sprintf
来格式化 double ii
和 jj
并使用 %02d
前导零。num2str
的第二个参数来格式化其输出,例如:num2str(ii,'%02d')
。i
and j
as loop counters,因为它们在 matlab 中的默认值为 sqrt(-1)
发布于 2013-01-08 21:32:59
这里是另一个解决方案,请注意,@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
发布于 2014-05-27 22:12:37
num2str
可以执行补零操作来填充该字段。在下面的示例中,4是所需的字段width+1。
num2str(1,'% 04.f')
Ans = 001
https://stackoverflow.com/questions/14213442
复制相似问题