string - texto - sentencias en python
Crear variables con nombres de cadenas (6)
Supongamos que quiero crear 10 variables que se verían así:
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
Esta es una versión simplificada de lo que pretendo hacer. Básicamente solo quiero guardar líneas de código creando estas variables de forma automática. ¿Existe la posibilidad de construir un nombre de variable en Matlab? El patrón en mi ejemplo sería ["x", num2str(i)]
. Pero no puedo encontrar una forma de crear una variable con ese nombre.
Si alguien más está interesado, la sintaxis correcta de la respuesta de Dan sería:
eval([''x'', num2str(i), '' = '', num2str(i)]);
Mi pregunta ya contenía la sintaxis incorrecta, así que es mi culpa.
También recomiendo usar una matriz de celdas o una estructura para tales casos. Creo que incluso te dará un impulso de rendimiento.
Si realmente necesita hacerlo, Dan le dijo cómo hacerlo. Pero también me gustaría apuntar a la función genvarname
. Se asegurará de que su cadena sea un nombre de variable válido.
EDITAR: genvarname es parte del núcleo de Matlab y no de la caja de herramientas de estadísticas
Necesitaba algo como esto ya que no puede hacer referencia a estructuras (o matrices de celdas, supongo) desde el espacio de trabajo en bloques Simulink si desea poder cambiarlas durante la simulación.
De todos modos, para mí esto funcionó mejor
assignin(''base'',[''string'' ''parts''],values);
Puedes hacerlo con eval pero realmente no deberías
eval([''x'', num2str(i), '' = '', num2str(i)]); %//Not recommended
Más bien use una matriz de celdas:
x{i} = i
for k=1:10
assignin(''base'', [''x'' num2str(k)], k)
end
A pesar de que hace tiempo que vengo, justed quería agregar otra respuesta.
la función genvarname es exactamente para estos casos
y si lo usa con una matriz de estructura tmp no necesita el cmd de evaluación
el ejemplo 4 de este enlace es cómo hacerlo http://www.mathworks.co.uk/help/matlab/ref/genvarname.html
for k = 1:5
t = clock;
pause(uint8(rand * 10));
v = genvarname(''time_elapsed'', who);
eval([v '' = etime(clock,t)''])
end
todo lo mejor
eyal