directed_hausdorff#
- scipy.spatial.distance.directed_hausdorff(u, v, rng=0)[source]#
計算兩個 2 維陣列之間的定向 Hausdorff 距離。
成對點之間的距離使用歐幾里得度量計算。
- 參數:
- u(M,N) 類陣列
輸入陣列,包含 N 維空間中的 M 個點。
- v(O,N) 類陣列
輸入陣列,包含 N 維空間中的 O 個點。
- rng整數 或
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 是整數,則使用新的
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_1整數
在 u 中,構成 Hausdorff 對的點的索引
- index_2整數
在 v 中,構成 Hausdorff 對的點的索引
- 引發:
- ValueError
如果 u 和 v 沒有相同的欄數,則會拋出例外。
另請參閱
scipy.spatial.procrustes
另一個用於兩個資料集的相似性測試
註解
使用 [1] 描述的早期中斷技術和隨機抽樣方法。雖然最壞情況效能為
O(m * o)
(與暴力演算法相同),但在實務中不太可能發生,因為輸入資料必須要求演算法探索每個單點交互作用,並在演算法對輸入點進行洗牌之後。最佳情況效能為 O(m),這可以通過選擇小於 cmax 的內迴圈距離並盡可能經常導致提前中斷來滿足。作者已正式證明平均執行時間更接近 O(m)。在 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.
範例
找出兩個 2 維座標陣列之間的定向 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 維座標陣列之間的一般(對稱)Hausdorff 距離
>>> max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0]) 3.0
找出產生 Hausdorff 距離的點的索引(Hausdorff 對)
>>> directed_hausdorff(v, u)[1:] (3, 3)