for i=1:N
f(i) = 'f'+i;
end
da un error en MatLab. ¿Cuál es la sintaxis correcta para inicializar una matriz con N cadenas del patrón fi?
Parece que incluso esto no funciona:
for i=1:4
f(i) = 'f';
end
for i=1:N
f(i) = 'f'+i;
end
da un error en MatLab. ¿Cuál es la sintaxis correcta para inicializar una matriz con N cadenas del patrón fi?
Parece que incluso esto no funciona:
for i=1:4
f(i) = 'f';
end
"asd" + (1:5)
funciona entonces.
Respuestas:
Puede concatenar cadenas usando strcat
. Si planea concatenar números como cadenas, primero debe usar num2str
para convertir los números en cadenas.
Además, las cadenas no se pueden almacenar en un vector o una matriz, por lo que f
deben definirse como una matriz de celdas y deben indexarse usando {
y }
(en lugar de los corchetes normales).
f = cell(N, 1);
for i=1:N
f{i} = strcat('f', num2str(i));
end
['f', num2str(i)]
es un poco más corto.
Un enfoque sencillo sin bucle sería utilizarlo genvarname
para crear una matriz de cadenas de celdas :
>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')
f =
'f1' 'f2' 'f3' 'f4' 'f5'
La función genvarname
ha quedado obsoleta, por lo que matlab.lang.makeUniqueStrings
se puede utilizar en su lugar de la siguiente manera para obtener el mismo resultado:
>> N = 5;
>> f = strrep(matlab.lang.makeUniqueStrings(repmat({'f'}, 1, N), 'f'), '_', '')
f =
1×5 cell array
'f1' 'f2' 'f3' 'f4' 'f5'
genvarname
.
genvarname
está en desuso.
Déjame agregar otra solución:
>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f =
'f1'
'f2'
'f3'
'f4'
'f5'
Si N
tiene más de dos dígitos ( >= 10
), comenzará a obtener espacios adicionales. Agregue una llamada a strtrim(f)
para deshacerse de ellos.
Como sprintfc
beneficio adicional, hay una función incorporada no documentada que devuelve amablemente una matriz de cadenas de celdas:
>> N = 10;
>> f = sprintfc('f%d', 1:N)
f =
'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
El uso sprintf
ya fue propuesto por ldueck en un comentario, pero creo que vale la pena ser una respuesta:
f(i) = sprintf('f%d', i);
En mi opinión, esta es la solución más legible y también brinda una buena flexibilidad (es decir, cuando desee redondear un valor flotante, use algo como %.2f
).
Intente lo siguiente:
for i = 1:4
result = strcat('f',int2str(i));
end
Si usa esto para nombrar varios archivos que genera su código, puede concatenar más partes al nombre. Por ejemplo, con la extensión al final y la dirección al principio:
filename = strcat('c:\...\name',int2str(i),'.png');
f
que se vea la matriz ? ¿Una sola cadena con todas lasfi
cadenas individuales concatenadas juntas? ¿Una matriz de caracteres con una cadena por fila? ¿Una matriz de celdas?