如何仅删除由特定 matlab 脚本创建的变量

Posted

技术标签:

【中文标题】如何仅删除由特定 matlab 脚本创建的变量【英文标题】:How to delete only variables created by a specific matlab script 【发布时间】:2014-05-22 09:50:30 【问题描述】:

有没有办法只删除脚本末尾在 matlab 脚本中生成的变量,而不删除脚本中未生成的工作区的任何其他变量?

注意:脚本不是函数。

基本上我想在一行

中执行以下操作
save abc.mat    % saves the whole workspace
some_script     % call the script
clear           % deletes the variables created by the script along with the whole workspace
load abc.mat    % again loads the whole earlier workspace

【问题讨论】:

some_script 会清除工作区吗? 使用structures 作为“删除”变量。 编辑后,现在您的标题和评论 - deletes the variables created by the script along with the whole workspace 与我认为矛盾或至少令人困惑。 我很抱歉造成误解,我以为你在问我在问题中写的那段代码。我将删除评论。是的,我希望some_script 删除它创建的变量。 【参考方案1】:

在脚本之前使用who,然后在脚本之后;比较结果 (setdiff) 以检测脚本中创建的变量,然后 clear 仅检测那些。

以下代码中的变量名varsbeforevarsaftervarsnew应保证不在脚本前或脚本内使用。

varsbefore = who; %// get names of current variables (note 1)
some_script
varsafter = []; %// initiallize so that this variable is seen by next 'who'
varsnew = []; %// initiallize too.
varsafter = who; %// get names of all variables in 'varsbefore' plus variables 
%// defined in the script, plus 'varsbefore', 'varsafter'  and 'varsnew'
varsnew = setdiff(varsafter, varsbefore); %// variables  defined in the script
%// plus 'varsbefore', 'varsafter'  and 'varsnew'
clear(varsnew:) %// (note 2)

关于代码的注释:

    who 与输出参数一起使用会返回一个包含所有变量名称的字符串元胞数组。 使用clear 的函数形式,输入参数采用从元胞数组生成的comma-separated list 形式。

【讨论】:

【参考方案2】:

你可以这样创建structures的变量:

FOO_STRUCT.foo_var = var_from_abc.mat + rand(1); 
FOO_STRUCT.foo_var2 = 10*log10(FOO_STRUCT.foo_var);
FOO_STRUCT.foo_var3 = FOO_STRUCT.foo_var2 + var_from_abc.mat;

大写部分是structure 名称。小写部分是variable

您可以在脚本中使用工作区中的变量,进行工作,然后在脚本结束时删除整个 structure

clear FOO_STRUCT

【讨论】:

如果工作区中有很多变量,那么将每个变量分配给结构需要很多行。在这种情况下,使用我在代码中提到的语法可能会更好。我只想要一个简短的命令。 您不必将每个变量分配给结构。结构可以毫无问题地使用工作区中的变量。只需在结构中插入您要用于计算并且以后要删除的变量 我是说要在结构FOO_struct 中插入每个有用的变量,每个变量都需要一行代码。如果我想使用很多变量,那么这可能是个问题。另外,我将复制我的变量,如果内存有限,这可能是个问题。

以上是关于如何仅删除由特定 matlab 脚本创建的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python 2.7从特定文件中读取环境变量

Tensorflow,Keras:如何创建仅在特定位置更新的可训练变量?

仅提取特定文件名然后将其用于变量的 Bash 脚本

matlab,简述脚本M文件和函数M文件的区别?

如何用matlab删除数据中的某个特定值?

如何在matlab中创建m文件