【发布时间】:2014-06-10 19:17:36
【问题描述】:
我正在为一个相当大的数据集创建径向基函数插值模型。主调用 `scipy.interpolate.Rbf(,) 大约需要一分钟和 14 GB 的 RAM。 由于并非应该运行它的每台机器都能够做到这一点,并且由于程序将经常在同一个数据集上运行,所以我想将结果腌制到一个文件中。这是一个简化的例子:
import scipy.interpolate as inter
import numpy as np
import cPickle
x = np.array([[1,2,3],[3,4,5],[7,8,9],[1,5,9]])
y = np.array([1,2,3,4])
rbfi = inter.Rbf(x[:,0], x[:,1], x[:,2], y)
RBFfile = open('picklefile','wb')
RBFpickler = cPickle.Pickler(RBFfile,protocol=2)
RBFpickler.dump(rbfi)
RBFfile.close()
RBFpickler.dump() 调用导致can't pickle <type 'instancemethod'> 错误。
据我了解,这意味着那里有一个方法(嗯,rbfi() 是可调用的),由于某种我不太明白的原因,它不能被腌制。
有谁知道以其他方式腌制或以其他方式保存 inter.Rbf() 调用的结果的方法?
其中有一些形状为 (nd,n) 和 (n,n) 的数组(rbfi.A、rbfi.xi、rbfi.di...),我假设它们存储了所有有趣的信息。我想我可以只腌制那些数组,但是我不确定如何再次将对象组合在一起......
编辑: 附加限制:我不允许在系统上安装其他库。我可以包含它们的唯一方法是它们是纯 Python,我可以将它们包含在脚本中,而无需编译任何东西。
【问题讨论】:
-
这是一个相关的错误报告,其中包含一些关于如何修复它的建议。 github.com/scipy/scipy/issues/2303.