scipy 有没有一种方法可以将预先计算好的Voronoi图以增量方式保存到文件中?

gzjq41n4  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(817)

我试图保存的Voronoi图的结果,允许增量点添加。Voronoi图是用大约106个2D点编译的。我想把结果保存到文件中以备将来使用,因为我看到每次使用时重建图的成本有点高。
我想在这个准备好的几何体上执行的操作是添加一个点并重新计算Voronoi图,这就是为什么下面使用增量选项的原因。由于准备好的几何体将被多次重复使用,我现在正在寻找一种将几何体存储为文件的方法。
我的第一次尝试是使用scipy.spatial.Voronoipickle,希望将来能够解开预先计算的结果。

# 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,但它也不工作。

iecba09b

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产生以下输出:

(
            self.vertices,
            self.ridge_points,
            self.ridge_vertices,
            self.regions,
            self.point_region,
        ) = qhull.get_voronoi_diagram()

它们是易于序列化的Python容器。但这似乎对您的用例没有多大帮助。
Voronoi图的一个性质是,添加一个点将对百万点图的一小部分产生严格的局部影响。因此,在至少一个轴上对{原始,增量}数据进行排序将建议一种解决更简单的子问题的方法,只涉及附近的邻居。
如果您的用例主要关心内部的有限单元,那么选择半径为K的球内的点将是一种方法。如果您愿意将点放在PostGIS表中,那么您将拥有可扩展的高性能半径查询。

相关问题