2012-06-15 13 views
14

Quiero cambiar un nombre de variable antes de exportarlo al entorno global, los datos son muy grandes, lo que significa que no puedo copiarlo a otra variable y eliminar el primero.cambio de nombre de variable matlab

los datos se cargan a ciertas variables y que no puedo cambiar también, se usa varias veces en trabajos de fondo diferentes, entonces lo que quiero hacer es cambiarle el nombre y enviarlo renombrado para que los trabajos no se mezclen y después de la próxima carga de trabajo y cambiar el nombre de nuevo, etc

básicamente es hacer en la ventana de comandos lo que puedo hacer con el ratón en el espacio de trabajo ....

¿alguien sabe cómo hacerlo?

+2

Manera directa: simplemente cópiela en otra variable y destruya la anterior. Además, este es un posible duplicado de [esta pregunta] (http://stackoverflow.com/questions/5964639/matlab-renaming-workspace-elements-from-command-window). –

+2

"...los datos son muy grandes, lo que significa que no puedo copiarlo en otra variable y eliminar el primero ... " –

+0

Chris: No importa MATLAB usa referencias, A = B no significa que B se ha copiado. –

Respuesta

14

Al asignar nombres de variables, matlab uses a "lazy copy", así que no hay razón por la cual:

new_name = old_name; 
clear old_name; 

no debería funcionar.

2

La única manera en que puedo pensar para hacer esto sin una copia de memoria sería envolver los datos originales en un objeto que es una subclase de la clase de control.

http://www.mathworks.co.uk/help/techdoc/matlab_oop/brfylzt-1.html

Puede entonces 'copia' la clase mango utilizando la sintaxis normal de

classB=classA 

..pero sólo está haciendo un alias para los mismos datos (cambios en ClassB se reflejan en classA) . Esto es lo más parecido en matlab a la semántica de puntero.

Por ejemplo, cree un archivo llamado myHandle y pegue el siguiente texto para definir la clase. .

classdef myHandle < handle 

    properties 
     data 
     moreData 
    end 

    methods 
    end 

end 

Puede utilizar esto como una estructura regular. Desde la línea de comandos, haga ...

>> x = myHandle 

x = 

    myHandle handle 

    Properties: 
     data: [] 
    moreData: [] 

    Methods, Events, Superclasses 

... podemos completar los datos. . .

>> x.data = [1 2 3 4]; 
>> x.moreData = 'efg'; 

... una vez que el objeto original se ha rellenado con los datos, un alias de los datos originales se pueden hacer escribiendo. .

>> y = x 

Lo interesante sucede a x cuando se modifica y, es decir

>> y.data = [33 44 55 66]; 
>> disp(x) 
x = 

    myHandle handle 

    Properties: 
     data: [33 44 55 66] 
    moreData: 'f' 

    Methods, Events, Superclasses 

Incluso puede borrar uno de los nombres de alias. .

clear x 

..y los datos seguirán estando disponibles en la otra asa para los datos, y. La memoria solo se libera cuando no hay más identificadores que se refieran a ella (cuando el reference count ha alcanzado cero).