scipy.spatial.distance.
directed_hausdorff#
- scipy.spatial.distance.directed_hausdorff(u, v, seed=0)[源代码][源代码]#
计算两个二维数组之间的有向Hausdorff距离。
使用欧几里得度量计算成对距离。
- 参数:
- u(M,N) array_like
在 N 维空间中的 M 个点的输入数组。
- v(O,N) array_like
输入数组包含 N 维中的 O 个点。
- 种子int 或 None, 可选
本地
numpy.random.RandomState
种子。默认值为 0,对 u 和 v 进行随机洗牌,保证可重复性。
- 返回:
- d双
数组 u 和 v 之间的有向Hausdorff距离,
- index_1整数
u 中 Hausdorff 对贡献点的索引
- index_2整数
v 中 Hausdorff 对的贡献点索引
- Raises:
- ValueError
如果 u 和 v 的列数不同,则会抛出异常。
参见
scipy.spatial.procrustes
两个数据集的另一个相似性测试
注释
使用了 [1] 描述的早期中断技术和随机采样方法。尽管最坏情况下的性能是 ``O(m * o)``(与暴力算法相同),但在实践中这种情况不太可能发生,因为输入数据需要算法探索每一个点的交互,并且在算法打乱输入点之后。最好的情况性能是 O(m),通过选择一个小于 cmax 的内循环距离来实现,这通常会导致早期中断。作者已经正式证明,平均运行时间更接近 O(m)。
Added in version 0.19.0.
参考文献
[1]A. A. Taha and A. Hanbury, “An efficient algorithm for calculating the exact Hausdorff distance.” IEEE Transactions On Pattern Analysis And Machine Intelligence, vol. 37 pp. 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)