簡體   English   中英

在 numpy 二維數組中查找連續的數字組,允許最大值。 Python 中兩個獨立值的距離

[英]Find continuous groups of numbers in a numpy 2D array allowing a max. distance on two independent values in Python

我有一個非常大的矩陣,我需要根據兩個標准對數據點進行聚類:

  1. 它們在 x 軸上的距離不應超過 3 以形成集群
  2. 它們在 y 軸上的距離也不應該超過 3 以形成一個集群。

例如矩陣中的以下數據點:

[14, 282681]
[14, 282680]
[21, 176161]
[22, 176162]
[37, 273403]
[37, 273443]
[41, 207638]

它們應分為:

{1: [[14, 282681][14, 282680]],
2: [[21, 176161],[22, 176162]],
3: [[37, 273403],
4: [[37, 273443]]],

在一維數組上只做 1) 是微不足道的,因為可以對數組進行排序,然后在每次間隙大於 3 時插入一個中斷。到目前為止,我已經嘗試過使用列表理解。 但是同時在兩個軸上結合這兩個標准真的讓我有點頭暈。 如果我先按照 x 軸排序,然后按照大於 3 的間隙切分,然后在 y 軸上重復該過程,數據就會混亂。 我試圖將數據點插入矩陣並在其上應用連接組件標簽。 它可以工作,但速度很慢。 我想知道是否有更快、更優雅的方法來解決這個問題?

第一個問題是您的問題沒有明顯的唯一解決方案 - 有很多方法可以對數據進行分區以滿足您的約束。 除此之外,我認為您真正想要的是為您的數據生成一個 Kd 樹(在您的情況下,K=2),它會滿足您的需求。 This is available in scipy: https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.KDTree.html and the query-ball-point method is most closely aligned to what you want.

暫無
暫無

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

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