在hdf5文件中存储python lmfit对象

时间:2015-01-06 08:40:36

标签: python h5py

我试图使用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

1 个答案:

答案 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()
相关问题