繁体   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