我有11×11的矩阵,我救了他们的.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文件。
可能有人请帮忙吗?
问题
i=01;
j=01;
['F',num2str(i), '_', num2str(j),'.mat']
计算结果为
F1_1.mat
而不是
F01_01.mat
如预期。
这样做的原因是, i=01
是一个double类型分配和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
格式化双ii
和jj
使用前导零%02d
。
可以使用的第二个参数num2str
格式化其输出,例如: num2str(ii,'%02d')
它是用一个很好的做法字符串格式化与字符串处理时的工具。
这是在MATLAB一个更好的做法不使用i
和j
循环计数器 ,因为在他们的MATLAB默认值是sqrt(-1)
这里是一个替代的解决方案,请注意,由@解决夏嘉曦更容易扩展到多个数字,但这一要求的字符串格式化的了解较少。
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
该num2str
可以做zeropadding来填充字段。 在下面4中的示例是所期望的字段宽度+ 1。
num2str(1,'% 04.f')
年= 001