簡體   English   中英

計算 3D 點雲的 EMD 非常慢

[英]Calculating EMD for 3D point-clouds is very SLOW

我想使用 Earth Mover's Distance 和以下代碼計算兩個 3D 點雲之間的距離,至少有 2000 個點,但是它太慢並且無法正常工作。 那么,有什么方法可以更快地計算出近似值嗎?

    from scipy.spatial.distance import cdist
    from scipy.optimize import linear_sum_assignment

    def emd(self):
        d = cdist(self.X, self.Y)
        assignment = linear_sum_assignment(d)
        return d[assignment].sum() / min(len(self.X), len(self.Y))

從 SciPy 1.4.0(2019 年 12 月發布)開始,通過此 pull request的工作, linear_sum_assignment的實現速度大大加快。 特別是,在一台過時的筆記本電腦上,2000x2000 幾何實例可以在不到 10 秒的時間內解決; 查看拉取請求和相關線程中的一些基准。

從 SciPy 1.6.0(2020 年 12 月發布)開始,還有scipy.sparse.csgraph.min_weight_full_bipartite_matching可以用作linear_sum_assignment的替代品; 顧名思義,它旨在與稀疏輸入一起使用; 當然,你的一切都是稀疏的,對於幾何輸入,它通常會比較慢,但在某些情況下,它也值得研究。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM