我试图使用python的h5py包在hdf5文件中存储使用lmfit包为python制作的拟合结果。
目前我发现自己手工重建数据对象的结构(即循环遍历字典中的所有键,获取值并保存它们)。
我觉得必须有更高效/ pythonic的方法在hdf5文件中保存这样的对象,类似于对象的pickle如何工作。
有没有人可以帮我找到一种方法来有效地存储hmf5文件中lmfit.model.ModelFit或lmfit.parameter.Parameters对象中包含的信息?
编辑显示当前使用的。
def add_analysis_datagroup_to_file(self, group_name='Analysis'):
try:
self.analysis_group= self.f.create_group(group_name)
except ValueError:
print 'Datagroup name "%s" already exists in hdf5 file' %group_name
self.analysis_group = self.f[group_name]
def save_fitted_parameters(self, fit_results=None):
if fit_results is None:
fit_results = self.fit_results
try:
fit_grp = self.analysis_group.create_group('Fitted Params')
except:
fit_grp = self.analysis_group['Fitted Params']
for parname, par in self.fit_results.params.iteritems():
try:
par_group = fit_grp.create_group(parname)
except:
par_group = fit_grp[parname]
par_dict = vars(par)
for val_name, val in par_dict.iteritems():
if val_name == '_val':
val_name = 'value'
if val_name == 'correl' and val is not None:
try:
correl_group = par_group.create_group(val_name)
except:
correl_group = par_group[val_name]
for cor_name, cor_val in val.iteritems():
correl_group.attrs.create(name=cor_name, data=cor_val)
else:
try:
par_group.attrs.create(name=val_name, data=val)
except:
pass
答案 0 :(得分:2)
这是一篇很老的文章,但是我也遇到了同样的问题,因此希望这个答案可以对某人有所帮助... 您可以使用lmfit的ModelResult类中的内置方法dumps()将文件转换为json格式,然后可以将其另存为hdf5字符串。如果要就地存储多个fit_results,也可以使用列表推导来存储json文件数组。 Parameter类和Model类也具有转储方法。 要使用load()重新加载(同样,由于参数和模型也具有加载方法,因此它们也可以重新加载)
f = h5py.File('fit_result_example.hdf5','w')
grp = f.create_group('group1')
dt = h5py.special_dtype(vlen=str)
fit_results = np.asarray([fit_results.dumps()], dtype=dt)
grp.create_dataset('fit_results', data=fit_results)
f.close()