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
sprintfpara formatear el dobleiijjcon el cero al%02dusando%02d.Puede usar el segundo argumento de
num2strpara 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
iyjcomo 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