suptitle subplots general for matlab string-formatting

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:

  1. Tenga en cuenta el uso de sprintf para formatear el doble ii jj con el cero al %02d usando %02d .

  2. Puede usar el segundo argumento de num2str para formatear su salida, por ejemplo: num2str(ii,''%02d'') .

  3. Es una buena práctica utilizar herramientas de formato de cadenas cuando se trata de cadenas.

  4. Es una mejor práctica en matlab no utilizar i y j como contadores de bucle , ya que su valor predeterminado en matlab es sqrt(-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