我试图保存的Voronoi图的结果,允许增量点添加。Voronoi图是用大约106个2D点编译的。我想把结果保存到文件中以备将来使用,因为我看到每次使用时重建图的成本有点高。
我想在这个准备好的几何体上执行的操作是添加一个点并重新计算Voronoi图,这就是为什么下面使用增量选项的原因。由于准备好的几何体将被多次重复使用,我现在正在寻找一种将几何体存储为文件的方法。
我的第一次尝试是使用scipy.spatial.Voronoi
和pickle
,希望将来能够解开预先计算的结果。
# Assume 'points' is a numpy array of shape (1234567, 2)
vor = Voronoi(points, incremental=True)
with open(outPickle, 'wb') as f:
pickle.dump(vor, f)
这就是我所遇到的:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "stringsource", line 2, in scipy.spatial._qhull._Qhull.__reduce_cython__
TypeError: self._qh cannot be converted to a Python object for pickling
我也试过import dill as pickle
,但它也不工作。
1条答案
按热度按时间iecba09b1#
有没有一种方法,能让人恍然大悟呢?
没有
https://github.com/scipy/scipy/tree/main/scipy/spatial/
源代码调用编译的C代码。没有
dict
的符号可供dill方便地迭代。QHull文档 * 确实 * 为您提供了一个起点:http://www.qhull.org/road/road-faq/xml/xml-faq.xml#XmlSerializer
您可能更喜欢创建内存中的克隆,因为这也可以满足您的用例。
增量
_update
产生以下输出:它们是易于序列化的Python容器。但这似乎对您的用例没有多大帮助。
Voronoi图的一个性质是,添加一个点将对百万点图的一小部分产生严格的局部影响。因此,在至少一个轴上对{原始,增量}数据进行排序将建议一种解决更简单的子问题的方法,只涉及附近的邻居。
如果您的用例主要关心内部的有限单元,那么选择半径为K的球内的点将是一种方法。如果您愿意将点放在PostGIS表中,那么您将拥有可扩展的高性能半径查询。