directed_hausdorff#
- scipy.spatial.distance.directed_hausdorff(u, v, rng=0)[source]#
计算两个 2-D 数组之间的定向 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 关键字。
- 返回值:
- d双精度浮点数
数组 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, vol. 37 pp. 2153-63, 2015。
示例
查找坐标的两个 2-D 数组之间的定向 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
查找坐标的两个 2-D 数组之间的常规(对称)Hausdorff 距离
>>> max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0]) 3.0
查找生成 Hausdorff 距离的点(Hausdorff 对)的索引
>>> directed_hausdorff(v, u)[1:] (3, 3)