¿Exactamente cómo quieres fque se vea la matriz ? ¿Una sola cadena con todas las ficadenas individuales concatenadas juntas? ¿Una matriz de caracteres con una cadena por fila? ¿Una matriz de celdas?
gnovice
Para la versión reciente de MATLB, use cadenas. Por ejemplo, "asd" + (1:5)funciona entonces.
bonanza
Respuestas:
117
Puede concatenar cadenas usando strcat. Si planea concatenar números como cadenas, primero debe usar num2strpara convertir los números en cadenas.
Además, las cadenas no se pueden almacenar en un vector o una matriz, por lo que fdeben definirse como una matriz de celdas y deben indexarse usando {y }(en lugar de los corchetes normales).
f = cell(N, 1);
fori=1:N
f{i} = strcat('f', num2str(i));
end
Algo como "f (i) = sprintf ('% s% d', f, i);" también funcionaría.
telenachos
mi problema fue la falta de uso de llaves para indexar
simpatico
10
['f', num2str(i)]es un poco más corto.
Oli
24
Para versiones anteriores a R2014a ...
Un enfoque sencillo sin bucle sería utilizarlo genvarnamepara crear una matriz de cadenas de celdas :
>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')
f =
'f1''f2''f3''f4''f5'
Para versiones más nuevas ...
La función genvarnameha quedado obsoleta, por lo que matlab.lang.makeUniqueStringsse 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'
El uso sprintfya 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).
de acuerdo con esto , parece que debe configurar "N" antes de intentar usarlo y parece que debe ser un int, no una cadena. No sé mucho sobre MatLab, pero solo lo que reuní de ese sitio ... espero que ayude :)
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:
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?"asd" + (1:5)
funciona entonces.Respuestas:
Puede concatenar cadenas usando
strcat
. Si planea concatenar números como cadenas, primero debe usarnum2str
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
fuente
['f', num2str(i)]
es un poco más corto.Para versiones anteriores a R2014a ...
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'
Para versiones más nuevas ...
La función
genvarname
ha quedado obsoleta, por lo quematlab.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'
fuente
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 astrtrim(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'
fuente
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
).fuente
de acuerdo con esto , parece que debe configurar "N" antes de intentar usarlo y parece que debe ser un int, no una cadena. No sé mucho sobre MatLab, pero solo lo que reuní de ese sitio ... espero que ayude :)
fuente
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');
fuente