以八度为单位清除特定的全局变量

时间:2017-01-21 10:59:46

标签: matlab variables octave global

我正在尝试使用' who'从多个.mat文件加载变量。功能并将其保存在变量A'中。我正在使用for循环。当我完成加载第一个文件并开始加载第二个文件后,然后“A'在第一个.mat文件中也显示变量。问题是功能'谁'保存变量,因为它是多个循环,我想清除'谁'每次循环后。我怎样才能做到这一点。有任何方法可以清除特定的全局变量。

for i=1:10; (10 mat files)
clear A;
clear who;
A=who; (all the variables in each mat file saved in A)
max(A(1,1); (finding max of variable A(1,1))
end

从上面的代码中,如果每个.mat文件都有5个变量,那么在第二个循环中,' who'有10个变量。谁没有被清除。

1 个答案:

答案 0 :(得分:0)

由于who(没有输入参数)返回当前工作空间中所有变量的列表而不是文件中的变量,因此并不完全清楚您尝试做什么。要让它返回文件中的变量列表,您需要执行以下操作:

vars = who('-file', filenames{i});

话虽如此,看起来您确实希望从已保存的所有mat文件中加载变量A,并在这些文件中找到A的最大值。

更好的方法是指定load的输出,它将数据加载到struct,其中每个变量都存储在结构中的单独字段中。您还可以指定load的其他输入,以指定您只想加载变量A(如果有其他变量)。然后,您可以将每个matfile加载到单独的struct并进行比较

for k = 1:numel(filenames)
    % Load variable A from this file into a struct
    data(k) = load(filenames{k}, 'A');
end

% Now find the maximum value of A
maxA = max([data.A]);