问题
我使用pyimfit包来拟合galaxy图像。我想把它们存储在硬盘上,所以我试着用pickle。但是附加的代码给了我一个错误。你知道吗
文件“/home/myusername/PycharmProjects/Master/FitContainer.py文件“,第56行,保存” pickle.dump公司(赛尔夫,f,pickle.u协议) 文件“stringsource”,第2行,inpyimfit.pyimfit\库.ModelObjectWrapper.减少\u cython TypeError:self.\u fitErrorsVect,self.\u fitResult,self.\u model,self.\u modelFluxes,self.\u paramVect,self.\u solverResults不能转换为Python对象进行酸洗
有办法解决这个问题吗?我想到的另一种方法是,通过将Imfit类中需要的属性存储在字典或类似的数据类型中,只从Imfit类中获取一些属性,但我最初的目标是通过将对象直接存储在Container类中来存储尽可能多的信息,从而使结构变得干净和简单。你知道吗
附加信息
应该注意的是,代码给了我
文件“/home/myusername/anaconda3/lib/python3.7/site-packages/pyimfit/描述.py“,第1039行,在getattr 返回self.\u函数集[0][attr] TypeError:'FunctionSetDescription'对象不可订阅
以前。因为我认为这应该是(非常新的)模块的一个bug,所以我注释掉了SimpleModelDescription类的getattr方法。再次运行代码会给我第一条错误消息。据我所知,如果我注释掉getattr它应该使用内置的python方法从这个类中获取属性,如果我正确地解释了第一条错误消息,这应该可以正常工作,问题实际上在于包的底层C库的python包装器。你知道吗
直接酸洗SimpleModelDescription类(而不是容器类)会导致相同的错误消息.wra你知道吗
代码
import pickle
import pyimfit
import numpy as np
class TestContainer:
# class for storing previously fitted images
def __init__(self, fitter):
self.fitter = fitter
def save(self, path):
with open(path, 'wb') as f:
pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
def sersic(x0, y0, PA, ell, I_e, r_e, n):
# define pyimfit ModelDescription instance
model = pyimfit.SimpleModelDescription()
bulge = pyimfit.make_imfit_function('Sersic', label='bulge')
model.addFunction(bulge)
return model
image = 1e6 * np.ones((150, 150)) # just random image to perform fit on
test_model = sersic(75, 75, 0, 0.5, 1e6, 20, 1.3) # dummy ModelDescription
fitter = pyimfit.Imfit(test_model) # create Imfit instance
fitter.loadData(image) # load image which is to be fitted
fitter.doFit(solver='LM') # perform fit with Levenberg-Marquard algorithm
test_container = TestContainer(fitter) # create container class instance
# save with pickle to ./test.pkl. Here: TypeError
test_container.save('test.pkl')
目前没有回答
相关问题 更多 >
编程相关推荐