15

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

数据被加载到某些变量并且我也无法更改,它在不同的后台作业中多次使用,所以我想要做的是重命名它并将其发送重命名,这样作业就不会混合,然后是下一个工作负载并再次重命名等。

基本上是在命令窗口中做我可以在工作区中用鼠标做的事情......

有谁知道怎么做?

4

2 回答 2

15

分配变量名称时,matlab 使用“惰性复制”,因此没有理由:

new_name = old_name;
clear old_name;

不应该工作。

于 2012-06-15T08:57:38.190 回答
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

有趣的事情发生在x何时y被修改,即

>> 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. 仅当没有更多句柄引用它时(当引用计数达到零时)才会释放内存。

于 2012-06-15T08:19:21.057 回答