我使用Scipy的KDTree实现来读取一个300 MB的大文件。现在,有没有一种方法可以将数据结构保存到磁盘并再次加载,还是每次启动程序时都要从文件中读取原始点并构造数据结构?我正在构建KDTree,如下所示:
def buildKDTree(self):
self.kdpoints = numpy.fromfile("All", sep=' ')
self.kdpoints.shape = self.kdpoints.size / self.NDIM, NDIM
self.kdtree = KDTree(self.kdpoints, leafsize = self.kdpoints.shape[0]+1)
print "Preparing KDTree... Ready!"
有什么建议吗?在
KDtree使用嵌套类定义其节点类型(innernode、leafnode)。Pickle只适用于模块级的类定义,因此嵌套类会使其中断:
但是,有一种(黑客)的解决方法,就是猴子将类定义修补到
^{pr2}$scipy.spatial.kdtree
at模块范围,这样pickler就可以找到它们。如果所有读写pickled KDtree对象的代码都安装了这些补丁,那么这个黑客攻击应该可以正常工作:输出:
相关问题 更多 >
编程相关推荐