scipy.spatial.distance.

directed_hausdorff#

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

计算两个二维数组之间的有向 Hausdorff 距离。

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

参数:
u(M,N) 类数组

输入数组,包含 N 维中的 M 个点。

v(O,N) 类数组

输入数组,包含 N 维中的 O 个点。

rngint 或 numpy.random.Generator 或 None,可选

伪随机数生成器状态。默认值为 0,因此 uv 的洗牌是可重现的。

如果 rng 通过关键字传递,则除了 numpy.random.Generator 之外的类型会传递给 numpy.random.default_rng 以实例化一个 Generator。如果 rng 已经是 Generator 实例,则使用提供的实例。

如果此参数通过位置传递,或者 seed 通过关键字传递,则应用参数 seed 的旧行为。

  • 如果 seed 为 None,则使用新的 RandomState 实例。如果可用,则使用来自 /dev/urandom(或 Windows 对应的)的数据初始化状态,否则使用系统时钟初始化状态。

  • 如果 seed 为 int,则使用新的 RandomState 实例,并使用 seed 进行播种。

  • 如果 seed 已经是 GeneratorRandomState 实例,则使用该实例。

在 1.15.0 版本中更改: 作为从使用 numpy.random.RandomState 过渡到使用 numpy.random.GeneratorSPEC-007 转换的一部分,此关键字从 seed 更改为 rng。在过渡期间,两个关键字将继续工作,但一次只能指定一个。过渡期过后,使用 seed 关键字的函数调用将发出警告。上面概述了 seedrng 的行为,但在新代码中应仅使用 rng 关键字。

返回:
ddouble

数组 uv 之间的有向 Hausdorff 距离,

index_1int

u 中对 Hausdorff 对有贡献的点的索引

index_2int

v 中对 Hausdorff 对有贡献的点的索引

引发:
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 Transactions On Pattern Analysis And Machine Intelligence,第 37 卷,第 2153-63 页,2015 年。

示例

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

>>> from scipy.spatial.distance import directed_hausdorff
>>> import numpy as np
>>> 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)