如何在循环中保存除一个变量之外的所有变量?
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循环上显示除一项之外的图像?
如何在 Kotlin 中使用 anko 删除除最新 10 条记录之外的所有记录?