如何在循环中保存除一个变量之外的所有变量?

Posted

技术标签:

【中文标题】如何在循环中保存除一个变量之外的所有变量?【英文标题】:How to save all the variables except one inside a loop? 【发布时间】:2016-02-01 12:14:01 【问题描述】:

我正在尝试将所有变量保存在循环中,但其中一个变量除外。但是错误或错误的文件扩展名始终是 MATLAB 返回给我的答案。 我哪里错了?

for SESSION=1:3
    for trial_number=1:10
        eval(['save data_',num2str(SESSION),'_trial_',num2str(trial_number),'.mat'...
                            ,'-regexp','^(?!(RESPONSE)$). ']);
    end
end

【问题讨论】:

我建议不要为此使用save filename 语法,而是使用save(filename,variables) 语法并首先为您的文件名和变量创建两个变量。这增加了代码的可读性,并允许您在使用它们之前打印这两个参数,以检查它们是否真的包含您所期望的。 在我发布的示例中,我得到了一个扩展名错误的文件:data_1_trial_1.mat-regexp^(?!(RESPONSE)$)。它的接缝格式是 mat-regexp^(?!(RESPONSE)$) @kika MATLAB 如何知道扩展的结束位置?您拥有一个[...] 中的所有内容。你应该听从丹尼尔的建议。 准确地说,它应该类似于save(filename,'-regexp',expression),其中文件名和表达式是您的变量。第一次阅读时没有注意到您正在使用正则表达式。 您忘记了“响应”的撇号,不是吗?!正如@Daniel 所说,您应该为文件名/目录创建一个变量。例如saveDir = sprintf('data_%d_Trial_%d.mat',SESSION,trial_number),然后您可以使用disp(saveDir) 检查saveDir 是否符合您的预期,然后使用save(saveDir,'regexp','RESPONSE'); 【参考方案1】:

您尝试做的直接问题是,在连接字符串时,您未能在文件名和 -regexp 参数之间放置一个空格 (' ')。

但是,我建议您利用 save 的功能来获取多个参数来清理内容并防止不必要的字符串连接:

save(filename, variablename)

其中filename 是*.mat 文件的路径,variablename 是一个字符串,表示您要保存的工作区中的变量。

您还可以将-regexp 标志值传递给save 函数。 (以下示例假设您的正则表达式是正确的)。

output_file = sprintf('data_%d_trial_%d.mat', SESSION, trial_number);
save(output_file, '-regexp', '^(?!(RESPONSE)$.')

您可以解决此问题的另一种方法(如果您不喜欢正则表达式或者您的匹配对于排除多个值来说太难了),是获取工作区中所有变量的列表,删除我不喜欢的变量不想保存,并将所有其他变量名称显式传递给save 函数。

variables = who;
toexclude = 'variable1', 'variable2';
variables = variables(~ismember(variables, toexclude));
save(output_file, variables:);

【讨论】:

太棒了。当我有多个要排除的变量时,第二种方法是唯一适合我的方法(我不能使用 clearvars,因为我的 matlab 版本早于 2008a)。我尝试使用 (XXX|YYY) 和其他带有负面查看正则表达式的组合,但没有任何运气。谢谢

以上是关于如何在循环中保存除一个变量之外的所有变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swiftUI中的Foreach循环上显示除一项之外的图像?

如何在php中访问foreach循环之外的多个变量

如何禁用表单上除按钮之外的所有控件?

如何在 Kotlin 中使用 anko 删除除最新 10 条记录之外的所有记录?

清除除一个变量之外的所有内容 rm(list = ls()) [重复]

如果全局不起作用,在Python中访问for循环之外的变量?