Matlab 如何从工作区中的变量中删除全局标志

Matlab 如何从工作区中的变量中删除全局标志,matlab,global-variables,Matlab,Global Variables,我有一些数据(.mat),在保存时设置为全局,现在保存为全局单元格。当我将其加载到工作区时,它会自动设置为全局 有没有办法从这个变量中删除全局标志,而不从工作区中删除变量本身,只删除全局属性 当我复制这个数组时,它也会自动复制它的全局属性,在中,它只说明如何设置为全局,而不是如何删除它。我使用的是MatlabR2015A global exportmat exportmat = cell(889,12); filename = 'test.mat'; save(filename) clear

我有一些数据(.mat),在保存时设置为全局,现在保存为全局单元格。当我将其加载到工作区时,它会自动设置为全局

有没有办法从这个变量中删除全局标志,而不从工作区中删除变量本身,只删除全局属性

当我复制这个数组时,它也会自动复制它的全局属性,在中,它只说明如何设置为全局,而不是如何删除它。我使用的是MatlabR2015A

global exportmat
exportmat = cell(889,12);
filename = 'test.mat';
save(filename)

clear -globals exportmat

load('test.mat')
whos

  Name              Size            Bytes  Class    Attributes

  exportmat       889x12            85344  cell     global   

如果RAM允许,我能找到的最简单的方法就是重新声明:

global A
A=3;
whos A
  Name      Size            Bytes  Class     Attributes

  A         1x1                 8  double    global    
B=A;
whos B
  Name      Size            Bytes  Class     Attributes

  B         1x1                 8  double               % Note: not global
clear -global
A=B;
clear B;
whos A
  Name      Size            Bytes  Class     Attributes

  A         1x1                 8  double         
如果您更频繁地需要此变量,只需使用它删除
全局
标志并再次保存即可

在R2016b上使用
保存
加载

global exportmat
exportmat = cell(889,12);
filename = 'test.mat';
save(filename)

clear exportmat
load('test.mat')
% whos exportmat

exportmat2=exportmat;

whos

  Name              Size            Bytes  Class    Attributes

  exportmat       889x12            85344  cell     global    
  exportmat2      889x12            85344  cell               
  filename          1x8                16  char               
如果R2015a不适用于单元格(我无法检查,因为我没有该版本),您可以重新分配每个单元格内容,如果它们包含双精度的内容,应该可以工作:

B = cell(size(A));
for ii = 1:size(B,1)
    for jj = 1:size(B,2)
        tmp = A{ii,jj};
        B{ii,jj} = tmp;
    end
end

谢谢,您的代码适合我,但如果我将其应用于变量,它将与全局属性一起复制,并且重新声明的变量也具有全局属性。”谁的exportmat名称大小字节类属性exportmat 889x12 457696722单元格全局>>exportmat2=exportmat;>>谁的exportmat2名称大小字节类属性exportmat2 889x12 457696722单元格全局“@C.B.请编辑您的问题,其中包含实际发生这种情况的示例数据,因为我看不到您的屏幕以了解发生了什么。注意,使用
A=A确实会保留
全局
属性,因此需要使用临时变量。对我来说,它也适用于
cell
类型变量。@C.B.我担心这可能是一个版本特定的问题,就像
cell
类型变量一样,这个技巧在我的2016b版本中有效。我四处看看。谢谢;在我的版本中,我尝试在单元格类型变量上使用global,但它不起作用。如果我把这个变量转换成一个单元格,它实际上会从double中删除全局标志。我对你的问题进行了大量的编辑,如果你不同意,请回滚它。我的动机是从变量中删除
global
属性实际上并不简单,也不容易在网上找到,这是一个很好的堆栈溢出。然而,你最初的问题最终是“不可复制的”,这在这里是离题的,因此问题将被关闭。这就是为什么我选择对它进行一点概括以保留在这里。@Adriaan:现在在这个代码段中有两个
load
命令。这是否如预期的那样?另外,
清除exportmat
是清除全局还是仅清除对其的本地引用?(我不经常使用它们,所以对此我不确定。)一个
清晰的globals
会让事情变得更加明显。@CrisLuengo我删除了第二个
加载,这确实是多余的,谢谢。通过删除
-global
和变量本身,我使
调用变得明确。如果我正确理解
clear
上的文档,
clear A
只会删除当前工作区中的副本。