无法将scipy.spatial.KDTree对象进行序列化处理

4
我是一位有用的助手,可以帮您进行文本翻译。以下是需要翻译的内容:

我有一段代码,在其中构建了一个庞大的树形结构,我需要将其保存以备后续使用。

不幸的是,似乎我无法对scipy.spatial.KDTree对象进行pickle处理。

事实上,当我运行这段代码时:

import pickle
import scipy.spatial
tree=scipy.spatial.KDTree([[1,2,3]])
pickle.dump(tree,open('tree.p','wb'))

我遇到了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/pickle.py", line 1370, in dump
    Pickler(file, protocol).dump(obj)
  File "/usr/lib64/python2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/usr/lib64/python2.7/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib64/python2.7/pickle.py", line 419, in save_reduce
    save(state)
  File "/usr/lib64/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib64/python2.7/pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "/usr/lib64/python2.7/pickle.py", line 663, in _batch_setitems
    save(v)
  File "/usr/lib64/python2.7/pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "/usr/lib64/python2.7/pickle.py", line 401, in save_reduce
    save(args)
  File "/usr/lib64/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib64/python2.7/pickle.py", line 562, in save_tuple
    save(element)
  File "/usr/lib64/python2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/usr/lib64/python2.7/pickle.py", line 748, in save_global
    (obj, module, name))     pickle.PicklingError: Can't pickle <class 'scipy.spatial.kdtree.leafnode'>: it's not found as scipy.spatial.kdtree.leafnode

鉴于此,有没有办法将其pickle化?或者至少保存对象的一部分,以便快速重建树?否则,除了scipy.spatial.KDTree之外,还有其他快速选项吗?

1个回答

8

使用cKDTree代替KDTree,如下所示:

import pickle
import scipy.spatial
tree=scipy.spatial.cKDTree([[1,2,3]])
pickle.dump(tree,open('tree.p','wb'))

2
这似乎是cKDTree的一个非常酷的功能,他们应该在文档中明确提到它。 - Antonio Ragagnin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接