如何根据最近距离减少海量数据收集中的点数?

我是python编码的初学者,我的主要工作领域是地球科学。我有一个庞大的数据库(数百万个点),其中包含以UTM表示的坐标(x,y)(这对我正在描述的问题而言并不重要),它表示半径为r的圆心。我想根据以多个半径表示的阈值(例如1 * r / 2 * r / 3.5 * r等)来减少这些点的数量;比阈值更近的点应从点列表中拒绝。我想创建一个新的遮罩通道,该通道将为接受的点显示1,为被拒绝的点显示0,并将结果绘制为半径为r的圆(以点为中心),既是原始点集又是新的接受通道点。图表中的不同颜色(标记为轴/标题/摘要图例)。在开始处理之前,应按升序整理数据点。我希望能够将图形导出为图像和pdf地图。 #

  1. 列表项

    • 数据类似于:
    • xy_data =
    • [[687690.,992340。],
    • [687720.,992340。],
    • [693210.,993000。],
    • [693420.,999420。],
    • [693450.,999420。],
    • [693480.,999420。],
    • [693540.,999210。],
    • [693570.,999210。],
    • [693840.,999870。],
    • [693870.,999870。],
    • [693900.,999870。],
    • [694200.,1000530。],
    • [694230.,1000530。],
    • [694260.,1000530。],
    • [694890.,999240。]]
    • ...
    • ...
    • ...

请在底部查看我尝试过的方法,这对我来说是一种不良的编码方式。请提出一种更好的python方法来完成此任务。

在此先感谢您的帮助和协助(请为每个步骤提供解释,请随时提出有助于理解程序设计部分的读物)

    import numpy as np
    from scipy.spatial import distance
    from scipy.spatial.distance import cdist


    r           = 100.
    k           = 0
    N           = xy_data[:].shape[0] # xy_data is input data as shown above          
    dist_tol    = 3*r
    Mask        = np.ones(N)
    sep         = np.ones(N) # points separation
    point_dist3 = np.ones(N).reshape(1,N)

    for i in np.arange(k,N - 1,1):

        if i == 0 :
            point_dist3[:,i] = 0.
            sep[i]           = 0.
            Mask[i]          = 1.

        for j in np.arange(i+1,N,1):
            print('i: ',i,'\tj: ',j,'\tk: ',k)
            sep[j]  = cdist(xy_data[i:i+1],xy_data[j:j+1])
            if sep[j] <= dist_tol: #if point_dist2[:,i] <= dist_tol:
                Mask[j] = 0
                k       = j
            else:
                 continue
hajunpeng 回答:如何根据最近距离减少海量数据收集中的点数?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2398674.html

大家都在问