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

时间:2014-05-22 09:50:30

标签: matlab

是否有某种方法可以仅删除脚本末尾的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

2 个答案:

答案 0 :(得分:6)

在脚本之前使用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)

关于代码的说明:

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

答案 1 :(得分:0)

您可以通过以下方式创建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