Matlab 清除倍频程中的特定全局变量

Matlab 清除倍频程中的特定全局变量,matlab,variables,octave,global,Matlab,Variables,Octave,Global,我正在尝试使用“who”函数从多个.mat文件加载变量,并将其保存在变量“a”中。我使用for循环来实现这一点。当我完成加载第一个文件并开始加载第二个文件时,“A”也会在第一个.mat文件中显示变量。问题是函数“who”将变量保存为多个循环,我想在每个循环后清除“who”。我怎样才能做到这一点。有任何方法可以清除特定的全局变量 for i=1:10; (10 mat files) clear A; clear who; A=who; (all the variables in each mat

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

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个变量。who未清除。

不完全清楚您试图执行的操作,因为如果没有输入参数,则返回当前工作区中所有变量的列表,而不是文件中的变量。要返回文件中的变量列表,您需要执行以下操作:

vars = who('-file', filenames{i});
也就是说,看起来您实际上希望从保存的所有mat文件中加载变量A,并在这些文件中找到A的最大值

更好的方法是指定要加载的输出,该输出将数据加载到结构中,其中每个变量作为结构中的单独字段存储。您还可以指定要加载的附加输入,以指定仅在存在其他变量的情况下加载变量。然后可以将每个matfile加载到单独的结构中并进行比较

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]);

遗憾的是,几天前你已经给出了几乎相同的建议,使用load和return value@Andy,为什么这很遗憾?这是一个具有类似解决方案的不同问题。哦,等等,我明白了,是同一个用户。。。。我猜他们没有把这个建议放在心上