scipy.spatial.distance.directed_hausdorff

scipy.spatial.distance.directed_hausdorff(u, v, seed=0)[源代码]

计算两个二维阵列之间的有向Hausdorff距离。

对之间的距离使用欧几里得度量来计算。

参数
u(M,N)类数组

输入数组。

v(O,N)类数组

输入数组。

seed整型或无

本地 numpy.random.RandomState 种子。默认值为0,这是u和v的随机混洗,以保证可重现性。

退货
d双倍

阵列之间的有向Hausdorff距离 uv

index_1集成

中对Hausdorff对有贡献的点的指标 u

index_2集成

中对Hausdorff对有贡献的点的指标 v

加薪
ValueError

如果出现以下情况,则会引发异常 uv 列数不同。

参见

scipy.spatial.procrustes

两个数据集的另一种相似性检验

注意事项

描述的早期中断技术和随机抽样方法。 [1]. 尽管最坏情况下的性能是 O(m * o) (与强力算法一样),这在实践中不太可能,因为输入数据必须要求算法探索每个单点交互,并且在此之后算法会对输入点进行混洗。最佳情况下的性能是O(M),这是通过选择小于CMAX的内环距离来满足的,并且会导致尽可能多的提前中断。作者已经正式证明了平均运行时间更接近O(M)。

0.19.0 新版功能.

参考文献

1

A.A.Taha和A.Hanbury合著的“一种计算精确Hausdorff距离的有效算法”。IEEE模式分析和机器智能学报,第一卷。37页,2153-63页,2015年。

示例

找出两个二维坐标数组之间的有向Hausdorff距离:

>>> from scipy.spatial.distance import directed_hausdorff
>>> u = np.array([(1.0, 0.0),
...               (0.0, 1.0),
...               (-1.0, 0.0),
...               (0.0, -1.0)])
>>> v = np.array([(2.0, 0.0),
...               (0.0, 2.0),
...               (-2.0, 0.0),
...               (0.0, -4.0)])
>>> directed_hausdorff(u, v)[0]
2.23606797749979
>>> directed_hausdorff(v, u)[0]
3.0

求出两个二维坐标阵列之间的常规(对称)Hausdorff距离:

>>> max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0])
3.0

查找生成Hausdorff距离(Hausdorff对)的点的索引:

>>> directed_hausdorff(v, u)[1:]
(3, 3)