scipy.spatial.distance.
directed_hausdorff#
- scipy.spatial.distance.directed_hausdorff(u, v, seed=0)[source]#
计算两个二维数组之间的有向豪斯多夫距离。
对之间距离的计算使用欧几里得度量。
- 参数:
- u(M,N) array_like
具有 N 维度 M 个点的输入数组。
- v(O,N) array_like
具有 N 维度 O 个点的输入数组。
- seedint 或 None,可选
本地
numpy.random.RandomState
种子。默认值为 0,对 u 和 v 的随机洗牌以确保可重复性。
- 返回值:
- ddouble
数组 u 和 v 之间的有向豪斯多夫距离,
- index_1int
导致豪斯多夫对的 u 中点的索引。
- index_2int
导致豪斯多夫对的 v 中点的索引。
- 引发:
- ValueError
如果 u 和 v 的列数不同,则会抛出异常。
另请参见
scipy.spatial.procrustes
用于两个数据集的另一个相似性测试
备注
使用早期中断技术和由 [1] 描述的随机采样方法。尽管最坏情况下的性能为
O(m * o)
(与暴力算法相同),但在实践中不太可能出现这种情况,因为输入数据将需要算法探索每个点的交互,并且算法在进行此操作时会对输入点进行随机洗牌。最佳情况下的性能为 O(m),这通过选择一个小于 cmax 的内循环距离来满足,并尽可能导致早期中断。作者已经正式证明,平均运行时间更接近 O(m)。在版本 0.19.0 中添加。
参考文献
[1]A. A. Taha 和 A. Hanbury,“一种计算精确豪斯多夫距离的有效算法”。IEEE 模式分析与机器智能汇刊,卷。37 页 2153-63,2015。
示例
查找两个二维坐标数组之间的有向豪斯多夫距离
>>> 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
查找两个二维坐标数组之间的通用(对称)豪斯多夫距离
>>> max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0]) 3.0
查找生成豪斯多夫距离的点的索引(豪斯多夫对)
>>> directed_hausdorff(v, u)[1:] (3, 3)