Matlab 如何从工作区中的变量中删除全局标志
我有一些数据(.mat),在保存时设置为全局,现在保存为全局单元格。当我将其加载到工作区时,它会自动设置为全局 有没有办法从这个变量中删除全局标志,而不从工作区中删除变量本身,只删除全局属性 当我复制这个数组时,它也会自动复制它的全局属性,在中,它只说明如何设置为全局,而不是如何删除它。我使用的是MatlabR2015AMatlab 如何从工作区中的变量中删除全局标志,matlab,global-variables,Matlab,Global Variables,我有一些数据(.mat),在保存时设置为全局,现在保存为全局单元格。当我将其加载到工作区时,它会自动设置为全局 有没有办法从这个变量中删除全局标志,而不从工作区中删除变量本身,只删除全局属性 当我复制这个数组时,它也会自动复制它的全局属性,在中,它只说明如何设置为全局,而不是如何删除它。我使用的是MatlabR2015A global exportmat exportmat = cell(889,12); filename = 'test.mat'; save(filename) clear
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相反,code>确实会保留全局
属性,因此需要使用临时变量。对我来说,它也适用于cell
类型变量。@C.B.我担心这可能是一个版本特定的问题,就像cell
类型变量一样,这个技巧在我的2016b版本中有效。我四处看看。谢谢;在我的版本中,我尝试在单元格类型变量上使用global,但它不起作用。如果我把这个变量转换成一个单元格,它实际上会从double中删除全局标志。我对你的问题进行了大量的编辑,如果你不同意,请回滚它。我的动机是从变量中删除global
属性实际上并不简单,也不容易在网上找到,这是一个很好的堆栈溢出。然而,你最初的问题最终是“不可复制的”,这在这里是离题的,因此问题将被关闭。这就是为什么我选择对它进行一点概括以保留在这里。@Adriaan:现在在这个代码段中有两个load
命令。这是否如预期的那样?另外,清除exportmat
是清除全局还是仅清除对其的本地引用?(我不经常使用它们,所以对此我不确定。)一个清晰的globals
会让事情变得更加明显。@CrisLuengo我删除了第二个加载,这确实是多余的,谢谢。通过删除-global
和变量本身,我使调用变得明确。如果我正确理解clear
上的文档,clear A
只会删除当前工作区中的副本。