Saving variables within a parfor loop
15 views (last 30 days)
Show older comments
Sean Pierre
on 6 Sep 2015
Commented: Walter Roberson
on 6 Sep 2015
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?
0 Comments
Accepted Answer
Mohammad Abouali
on 6 Sep 2015
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.
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)
0 Comments
More Answers (1)
Walter Roberson
on 6 Sep 2015
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 Comments
Walter Roberson
on 6 Sep 2015
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
See Also
Categories
Find more on Beamforming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!