Calculating Point Density using Python

前端 未结 4 1845
花落未央
花落未央 2020-12-18 05:46

I have a list of X and Y coordinates from geodata of a specific part of the world. I want to assign each coordinate, a weight, based upon where it lies in the graph.

4条回答
  •  轮回少年
    2020-12-18 06:27

    If you have a lot of points, you may compute nearest neighbors more efficiently using a KDTree:

    import numpy as np
    import scipy.spatial as spatial
    points = np.array([(1, 2), (3, 4), (4, 5), (100,100)])
    tree = spatial.KDTree(np.array(points))
    radius = 3.0
    
    neighbors = tree.query_ball_tree(tree, radius)
    print(neighbors)
    # [[0, 1], [0, 1, 2], [1, 2], [3]]
    

    tree.query_ball_tree returns indices (of points) of the nearest neighbors. For example, [0,1] (at index 0) means points[0] and points[1] are within radius distance from points[0]. [0,1,2] (at index 1) means points[0], points[1] and points[2] are within radius distance from points[1].

    frequency = np.array(map(len, neighbors))
    print(frequency)
    # [2 3 2 1]
    density = frequency/radius**2
    print(density)
    # [ 0.22222222  0.33333333  0.22222222  0.11111111]
    

提交回复
热议问题