Как найти все соседние точки точки на определенном расстоянии от нее? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть два фрейма данных df1 и df2, я хочу выяснить все соседние точки из df1, который является соседом к точкам в df2 (необходимо найти для каждой точки в df2 итеративным образом) в пределах определенного радиальное расстояние.

Как я могу это сделать?

на данном рисунке: черные точки в df1 и красные точки в df2, я хотел бы найти соседние точки каждой красной точки , enter image description here

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

В псевдокоде (не указан язык c и ОЧЕНЬ слабо напечатан):



function getDistance(point pointA, point pointB){
  diffx = absoluteValue(pointA.x - pointB.x);
  diffy = absoluteValue(pointA.y - pointB.y);
  return squareRoot(diffx^2 + diffy^2)
}

for point1 in df1{

  //each obj stores a point and a corresponding distance
  Object distance{
    point2Identifier;
    distanceFromPoint1;
  }
  ObjectArray distances;  //Array of distance objects 

  for point2 in df2{
    distances.add(getDistance(point1, point2)); 
  }
  distances.getSmallest /*Finds the distance obj  with the smallest distanceFromPoint1 prop and stores it however you see fit*/
}

Это было не в моей голове и быстро набиралось, так что упрощение и реализация остаются за вами. Скорее всего, это не самый быстрый и не самый эффективный способ достижения того, чего вы хотите. Я уверен, что это может быть значительно упрощено, особенно в Python. Как вы, наверное, знаете, API изобилует методами для упрощения математики в коде.

0 голосов
/ 12 февраля 2020

Найти всех ближайших соседей в пределах указанного c расстояния

#x,y are the x, y columns in the data frame and the radial distance is 0.1
import numpy as np
import scipy.spatial as spatial


points=df1[['x','y']]
points_array= points.rename_axis('ID').values


point_tree = spatial.cKDTree(points_array)


for item in range(0,len(df2),1):
 print(point_tree.data[point_tree.query_ball_point([df2.x.iloc[item], cells_final.lat.iloc[item]], 0.1)])

...