更改变量名称 Matlab

15

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

数据加载到特定变量中,我也不能更改它,它在不同的后台作业中多次使用,所以我想重命名它并发送重命名后的数据,以便作业不会混淆,然后为下一个作业加载并重新命名等等。

基本上就是在命令窗口中执行与工作区相同的操作,而这是用鼠标完成的...

有人知道如何做吗?


2
直接的方法:将其复制到另一个变量中并销毁旧变量。此外,这可能是此问题的重复。 - Eitan T
2
"...数据非常大,意味着我无法将其复制到另一个变量中并删除第一个变量..." - Chris Taylor
Chris:不重要。MATLAB使用引用,A=B并不意味着B被复制。 - Hannes Ovrén
@HannesOvrén 当你说“MATLAB使用引用,A=B并不意味着B被复制。”时,这意味着在复制后,只有当B被更改时,A才会实际创建并占用所需的内存空间。 - Nishant
当然可以。但是重点是你要执行 clear A,这样你就不会错误地执行该操作(就像接受的答案和上面的评论所告诉你的那样)。我只是指出给一个新变量赋值并不会复制数据,因为它只是对相同数据的引用。 - Hannes Ovrén
2个回答

16

在给变量命名时,Matlab使用"懒复制",因此没有理由:

new_name = old_name;
clear old_name;

不应该起作用。


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中访问,内存只有在没有更多的句柄引用它时(当引用计数达到零时)才会被释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接