scipy.spatial.distance.

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,因此 uv 的洗牌操作是可重現的。

如果 rng 是通過關鍵字傳遞的,則除了 numpy.random.Generator 之外的類型將傳遞給 numpy.random.default_rng 以實例化 Generator。如果 rng 已經是 Generator 實例,則使用提供的實例。

如果此參數是按位置傳遞的,或者 seed 是通過關鍵字傳遞的,則參數 seed 的舊版行為適用

  • 如果 seed 為 None,則使用新的 RandomState 實例。如果可用,則使用來自 /dev/urandom(或 Windows 對應物)的資料初始化狀態,否則從系統時鐘初始化。

  • 如果 seed 是整數,則使用新的 RandomState 實例,並以 seed 作為種子。

  • 如果 seed 已經是 GeneratorRandomState 實例,則使用該實例。

變更於版本 1.15.0:作為從使用 numpy.random.RandomState 過渡到 numpy.random.GeneratorSPEC-007 過渡的一部分,此關鍵字已從 seed 變更為 rng。在過渡期間,兩個關鍵字將繼續有效,但一次只能指定一個。在過渡期之後,使用 seed 關鍵字的函數呼叫將發出警告。 seedrng 的行為都在上面概述,但在新程式碼中應僅使用 rng 關鍵字。

回傳值:
d雙精度浮點數

陣列 uv 之間的定向 Hausdorff 距離,

index_1整數

u 中,構成 Hausdorff 對的點的索引

index_2整數

v 中,構成 Hausdorff 對的點的索引

引發:
ValueError

如果 uv 沒有相同的欄數,則會拋出例外。

另請參閱

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)