微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

曼哈顿度量中的 Voronoi 图

如何解决曼哈顿度量中的 Voronoi 图

我使用 scipy.spatial 来可视化 Voronoi 图。但是,这里使用的距离度量是欧几里得 (L2)。我正在我的 Voronoi 图上寻找一种曼哈顿 (L1) 度量方式。有没有一种简单(或多或少)的方法来做到这一点?

import numpy as np
import matplotlib.pyplot as plt

points = np.array([[1.5,1.],[3.5,[5.,2.],[2.5,3.],[4.,4.]])
    
from scipy.spatial import Voronoi,voronoi_plot_2d
vor = Voronoi(points)

fig = plt.figure()
ax = fig.add_subplot('111')
ax.plot(points[:,0],points[:,1],'o',color='k')
ax.set_xlim([-1,9])
ax.set_ylim([-1,9])
voronoi_plot_2d(vor,ax)

基本上我想得到类似的东西,但在 L1 指标中。

enter image description here

我发现 scipy.spatial.distance.cityblock 可以处理感兴趣的指标,但不完全确定如何实现它才能使其正常工作?

解决方法

如果区域的可视化和计算是您的唯一要求,您可以使用我们不久前做过的名为 mcvoronoi 的 pip 库。这是基于蒙特卡罗采样。我添加了一个选项来更改此答案的距离度量。更新版本(带有距离度量选项)尚未在 pip 上发布,但您可以使用 github master 分支。用法如下图:

  • 克隆当前目录中的 repository
  • 运行python example.py

example.py 包含以下基本行:

lat_lon_area,mean_percentage_error = voronoi_area(points,voronoi_plot_enabled=True,NUM_COLORS=5,metric='manhattan')

图片保存如下:

您当然可以通过增加采样点数来使它们变得超级脆。还会生成显示面积计算误差的误差图。 image

您可能想要使用更多颜色,但如果您有大量区域,略多于 4 colors 可能就足够了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。