2012-06-15 170 views
14

我想在将其导出到全局环境之前更改变量名称,数据非常大,这意味着我无法将其复制到另一个变量并删除第一个变量。更改变量名称matlab

数据被加载到某些变量,我不能改变,它在不同的后台作业中被多次使用,所以我想要做的是重命名它并重新命名,以便作业不会混合,对于接下来的工作负载和重命名后再次等

主要是在命令窗口中我可以在工作区中的鼠标事要做....

有谁知道怎么办呢?

+2

直截了当的方法:只是将它复制到另一个变量,并摧毁旧的。此外,这是[这个问题]的可能重复(http://stackoverflow.com/questions/5964639/matlab-renaming-workspace-elements-from-command-window)。 –

+2

“...数据非常大,这意味着我不能将它复制到另一个变量并删除第一个...“ –

+0

Chris:没关系。MATLAB使用引用,A = B并不意味着B被复制。 –

回答

2

我可以想到的做这个没有内存副本的唯一方法是将原始数据包装在一个对象中,该对象是句柄类的一个子类。

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

然后,您可以“复制”使用正常的语法

classB=classA 

..但你只是做了相同的数据的别名手柄类(ClassB的到变化反映在CLASSA) 。这是matlab中最接近指针式语义的东西。

例如,创建一个名为myHandle的文件并粘贴以下文本来定义类。 。

classdef myHandle < handle 

    properties 
     data 
     moreData 
    end 

    methods 
    end 

end 

然后,您可以像使用常规结构一样使用它。从命令行执行...

>> x = myHandle 

x = 

    myHandle handle 

    Properties: 
     data: [] 
    moreData: [] 

    Methods, Events, Superclasses 

...然后我们可以填充数据。 。 。

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

...一旦原始对象已经填充了数据,可以通过键入来创建原始数据的别名。 。

>> y = x 

有趣的事情发生在xy被修改,即

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

    myHandle handle 

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

    Methods, Events, Superclasses 

你甚至可以清晰的别名之一。 。

clear x 

..和数据仍然可用在其他句柄数据,y。只有在没有更多的句柄时才释放内存(当reference count达到零时)。