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,因此 u 和 v 的洗牌是可重现的。
如果 rng 通过关键字传递,则除了
numpy.random.Generator
之外的类型会传递给numpy.random.default_rng
以实例化一个Generator
。如果 rng 已经是Generator
实例,则使用提供的实例。如果此参数通过位置传递,或者 seed 通过关键字传递,则应用参数 seed 的旧行为。
如果 seed 为 None,则使用新的
RandomState
实例。如果可用,则使用来自/dev/urandom
(或 Windows 对应的)的数据初始化状态,否则使用系统时钟初始化状态。如果 seed 为 int,则使用新的
RandomState
实例,并使用 seed 进行播种。如果 seed 已经是
Generator
或RandomState
实例,则使用该实例。
在 1.15.0 版本中更改: 作为从使用
numpy.random.RandomState
过渡到使用numpy.random.Generator
的 SPEC-007 转换的一部分,此关键字从 seed 更改为 rng。在过渡期间,两个关键字将继续工作,但一次只能指定一个。过渡期过后,使用 seed 关键字的函数调用将发出警告。上面概述了 seed 和 rng 的行为,但在新代码中应仅使用 rng 关键字。
- 返回:
- ddouble
数组 u 和 v 之间的有向 Hausdorff 距离,
- index_1int
在 u 中对 Hausdorff 对有贡献的点的索引
- index_2int
在 v 中对 Hausdorff 对有贡献的点的索引
- 引发:
- ValueError
如果 u 和 v 的列数不同,则会抛出异常。
另请参阅
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)