Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在numpy 2D数组中查找连续的数字组,在Python中允许两个独立值的最大距离_Python_Arrays_Numpy_Scikit Image - Fatal编程技术网

在numpy 2D数组中查找连续的数字组,在Python中允许两个独立值的最大距离

在numpy 2D数组中查找连续的数字组,在Python中允许两个独立值的最大距离,python,arrays,numpy,scikit-image,Python,Arrays,Numpy,Scikit Image,我有一个非常大的矩阵,需要根据两个标准对数据点进行聚类: 它们之间的距离不应超过x轴上的3,以形成集群 它们之间的距离也不应超过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]

我有一个非常大的矩阵,需要根据两个标准对数据点进行聚类:

  • 它们之间的距离不应超过x轴上的3,以形成集群
  • 它们之间的距离也不应超过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轴上重复该过程,数据就会被弄乱。
    我尝试将数据点插入矩阵,并在此矩阵上应用连接组件标签。它能工作,但速度非常慢。我想知道是否有更快、更优雅的方法来解决这个问题?

    第一个问题是,您的问题没有明显的唯一解决方案-有许多方法可以分割数据以满足您的约束。除此之外,我认为您真正想要的是为您的数据生成一个K-d树(在您的例子中,K=2),它将满足您的需要。这在scipy中可用:
    query-ball-point
    方法与您想要的最接近。

    多大是“非常大”?在两个维度上都可能是一百万左右!KD tree不是看欧几里德距离,而是看每轴距离吗?@Ehsan查询是看欧几里德距离,但是请注意,你的L-无限球半径=3个球(=正方形)包含在半径为3 sqrt(2)的磁盘中,所以请看一下并过滤。太棒了!这就成功了,非常感谢你的回答。它也足够快。@IgorRivin,但这不是将球和正方形之间的点错误地聚集到球中吗?我想不出一个简单的方法来将过滤转换成正确的聚类。