Saving variables within a parfor loop

11 次查看(过去 30 天)
I wish to save individual variables in my script that are defined in a parfor loop. I defined a function called saveVariables.m that would save a specified variable to a .mat file as follows.
function l = saveVariables(local_filename, variable, index)
save(['simulation_' num2str(index) '\' local_filename], variable)
l = 1;
end
The issue that I have is that MATLAB produces the error
Error using saveVariables (line 4)
Argument must contain a string.
I use the backlash '\' since I am running Matlab on Windows. local_filename is meant to be the string of the name of the file that I wish to save. How can I work around this string error?

采纳的回答

Mohammad Abouali
Mohammad Abouali 2015-9-6
Two things:
(1) When using save() the way that you are using the second input must be also an string. So if you want to save a variable called myVariable in a file called myOutputFile='D:\myDataFolder\somename.mat' then you have to issue the command as follows:
save(myOutputFile,'myVariable')
Note the quote around myVariable.
This is different when you use the non-function form of the save() as follow:
save 'D:\myDataFolder\somename.mat' myVariable
(2) save() command does not work in SPMD or PARFOR section. Click here for another post about the same topic;
You need to first define a function as follows:
function savetofile(data,fullfilename)
save(fullfilename,'data');
end
and then whenever you are in SPMD and PARFOR and willing to save something instead of using the regular save() command use the above function as follows:
savetofile(myVariable,myOutputFile)

更多回答(1 个)

Walter Roberson
Walter Roberson 2015-9-6
But what are you passing in for "variable" ? It must be the name of a variable.
You should consider using fullfile() . And you should consider using sprintf() to construct the name.
save( fullfile(sprintf('simulation_%d',index), local_filename), variable)
  4 个评论
Sean Pierre
Sean Pierre 2015-9-6
I am still receiving the same error of
Error using saveVariables (line 3)
Variable 'RD' not found.
. I changed my saveVariables script to
function l = saveVariables(local_filename, variable, index)
save( fullfile(sprintf('simulation_%d',index), local_filename), inputname(2));
l = 1;
end
and I call it with
saveVariables( 'RD_1pk.mat', RD, j);
Walter Roberson
Walter Roberson 2015-9-6
function l = saveVariables(local_filename, variable, index)
varname = inputname(2);
savestruct.(varname) = variable;
save( fullfile(sprintf('simulation_%d',index), local_filename), '-struct', 'savestruct')
l = 1;
end

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Scope Variables and Generate Names 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by