subplots - super title matlab
Nombre de archivo Matlab con nĂºmeros sin relleno (3)
El num2str
puede hacer zeropadding para llenar el campo. En el ejemplo de abajo 4 es el ancho de campo deseado + 1.
num2str(1,''% 04.f'')
Ans = 001
Tengo matrices 11x11 y las .mat
como archivos F01_01
de F01_01
a F11_11
. Tengo que ejecutar una función Func
en cada archivo. Como lleva mucho tiempo, quiero escribir un script para ejecutar la función automáticamente:
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
Pero no funciona, Matlab no puede encontrar los archivos mat.
¿Podría alguien ayudarme?
El problema
i=01;
j=01;
[''F'',num2str(i), ''_'', num2str(j),''.mat'']
evalúa a
F1_1.mat
y no a
F01_01.mat
como se esperaba.
La razón de esto es que i=01
es una asignación de tipo doble e i
es igual a 1
- no hay ceros a la izquierda para estos tipos de variables.
Una solución
una posible solución para el problema sería
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
Varios comentarios:
Tenga en cuenta el uso de
sprintf
para formatear el dobleii
jj
con el cero al%02d
usando%02d
.Puede usar el segundo argumento de
num2str
para formatear su salida, por ejemplo:num2str(ii,''%02d'')
.Es una buena práctica utilizar herramientas de formato de cadenas cuando se trata de cadenas.
Es una mejor práctica en matlab no utilizar
i
yj
como contadores de bucle , ya que su valor predeterminado en matlab essqrt(-1)
.
Aquí hay una solución alternativa, tenga en cuenta que la solución de @ Shai se expande más fácilmente a múltiples dígitos, pero esta requiere menos comprensión del formato de cadenas.
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