Cómo concatenar un número a un nombre de variable en MATLAB?

Tengo una variable a = 1 . Quiero generar un nombre de variable del formulario:

 variableNumber 

Entonces en este ejemplo, me gustaría

 a1 a2 a3 

como variables. ¿Cómo puedo hacer eso?

Prueba genvarname .

 varname = genvarname(str) 

es la syntax básica para su uso. La documentación de MATLAB contiene ejemplos detallados del uso de esta función con una lista de exclusión (para garantizar nombres únicos de variables). Deberá usar eval u otra función (por ejemplo, assignin , mencionada en una respuesta anterior) para utilizar este nombre de variable.

Para responder la pregunta por completo,

 varnamelist = genvarname({'a','a','a','a','a'}); for l=1:length(varnamelist) eval([varnamelist{l} '= l^2']); end 

Por supuesto, hay formas más eficientes de armar una lista de entrada para genvarname , esto se deja como ejercicio;)

Si le preocupa el rendimiento, tenga en cuenta que eval puede ralentizar la secuencia de comandos / función en gran medida; Personalmente, recomendaría el uso de tipos de datos struct o cell si necesita nombres dynamics de variables.

Mi respuesta a esta pregunta es “¿Estás seguro de que realmente quieres hacer eso?”

Si tiene una serie de variables como esta, entonces tendrá que encontrar la forma de referirse a todas esas variables más adelante, lo que probablemente signifique un EVAL o algo similar.

Si sabes que todo lo que almacenarás en este será escalar, puedes almacenarlos todos en un vector:

 a(1) = 1; a(2) = 2; a(3) = 3; 

¿Qué pasa si no tienes escalares?

 a{1} = 1; a{2} = 'Doug'; a{3} = [1 2 3 4]; 

Entonces puede referirse a estos como {1} o lo que sea.

A menos que tenga una buena razón para hacer esto, es mejor que haga una matriz de células, una matriz de estructuras, vectores o alguna otra cosa.

Use assignin .

 assignin('base', sprintf('variable%d', 1), 1:10) 

EDITAR: Como mencionó JS, las estructuras son generalmente mejores para los nombres de campo dynamics. Puedes usarlos así:

 varnames = {'foo', 'bar'}; str = struct; for i = 1:length(varnames) str = setfield(str, varnames{i}, rand); %#ok end str = foo: 0.4854 bar: 0.8003 

O incluso más simplemente, así:

 str2.('alpha') = 123; str2.('beta') = 1:10; 

Mi respuesta a esta pregunta es “¿Estás seguro de que realmente quieres hacer eso?”

Pero si su respuesta es SÍ, esa es su respuesta:

 for k=1:5 eval(['a' num2str(k) '= k;']) end 

He estado usando este código para una aplicación con redes neuronales Bootstrap

 % k fold test with automatic division of data warning off % read in X % read in T % perform k fold division of input time series called 'K-fold Cross-Validation % Bootstrap' CVO = cvpartition(X,'k',10); % creates 10 sub samples of 'X' and divides it into 'training (ie training and validation)' and 'testing' sets for i = 1:CVO.NumTestSets eval(['xtv' num2str(i) '=X(CVO.training(i));']) % cross-validation training sets of 'X' eval(['xt' num2str(i) '=X(CVO.test(i));']) % cross-validation testing set of 'X' eval(['ttv' num2str(i) '=T(CVO.training(i));']) % cross-validation training set of 'T' eval(['tt' num2str(i) '=T(CVO.test(i));']) % cross-validation testing set of 'T' end