【问题标题】:Clearing a specific global variable in octave以八度清除特定的全局变量
【发布时间】:2017-01-21 10:59:45
【问题描述】:

我正在尝试使用“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 个变量,那么在第二个循环中,“谁”有 10 个变量。谁没有被清除。

【问题讨论】:

    标签: matlab variables octave global


    【解决方案1】:

    不完全清楚您要做什么,因为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]);
    

    【讨论】:

    • 很遗憾,几天前你已经给出了几乎相同的建议(使用带返回值的负载)stackoverflow.com/questions/41709118/…
    • @Andy 为什么这么遗憾?这是一个类似解决方案的不同问题。哦等等,我明白了,是同一个用户....我猜他们没有把建议放在心上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多