【问题标题】:changing variable name matlab更改变量名matlab
【发布时间】:2012-06-18 04:14:12
【问题描述】:

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

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

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

有人知道怎么做吗?

【问题讨论】:

  • 直截了当的方法:只需将其复制到另一个变量中并销毁旧变量即可。此外,这可能与 this question 重复。
  • "...数据很大,我不能把它复制到另一个变量并删除第一个..."
  • 克里斯:没关系。 MATLAB 使用引用,A=B 并不意味着 B 被复制。
  • @HannesOvrén 当你说“MATLAB 使用引用,A=B 并不意味着 B 被复制”。那么这意味着复制后,如果仅更改B,则实际创建A并占用所需的内存空间。
  • 当然。但关键是你这样做 clear A 这样你就不会错误地这样做(就像接受的答案和上面的评论告诉你的那样)。我只是指出,为新变量分配名称不会复制数据,因为它只是对相同数据的引用。

标签: matlab rename


【解决方案1】:

分配变量名时,matlab uses a "lazy copy",所以没有理由:

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
    

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

    >> 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 达到零时)才会释放内存。

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 2018-02-17
      • 2014-06-11
      相关资源
      最近更新 更多