Сравнивать список координат с другой и Ваше радио

Хорошие!

Давайте видеть у меня есть функция, которая производит мне список (Он заносит в список A) координат в numpy.

[[1,1][1,6][3,5][5,7]] <-(например)

И у меня есть с другой стороны другой список (он заносит в список B) с большим количеством координат (Также в формате numpy)

[[2,1][1,5][7,8][9,10][10,10][11,11]]

Тогда моя цель, - перемещая его список A и радио (1 например) сравните со списком B и скажите мне, что точки списка A он пересекается с каким-либо из списка B. в этом случае перемещая его радио 1, так как он сказал бы мне

занеси в список В [[1,1][1,6]] он пересекается со списком [[2,1][1,5]]

я подумал, что он делает функцию, которая производит тебе площадь каждой точки списка A с этим радио. и потом сделайте тебя convexhull..., но не, если будет существовать более быстрая и оптимальная функция, так как у моего списка есть более 100.000 точек.

Код, который у меня есть, - следующий (но это не оптимальная версия)

def getRadius(cords,radio):
#   print cords[1:] lado derecho
#   print cords[:1] lado izquierdo 
    x = []
    y = []
    x.append(np.asscalar(cords[1:]) + radio/2)
    x.append(np.asscalar(cords[1:]) - radio/2)
    y.append(np.asscalar(cords[:1]) + radio/2)
    y.append(np.asscalar(cords[:1]) - radio/2)
    return(np.array(list(itertools.product(y, x))))

def getListNewCoords(listCoords,radio,Poids):
    newList = []
    for i in listCoords:
        newCoords = getRadius(i,radio)
        inHull = in_hull(Poids,newCoords)
        z = Poids[inHull]
        if not z:
            newList.append(i)
    return(newList)
3
задан 27.01.2017, 14:11
0 ответов

Ты можешь вычислять дистанцию каждой точки первого списка (я назову ее a) с дистанцией всех точек второго списка (я назову ее b). Если ты это делаешь из-за каждой точки первого списка, ты можешь делать это формой iterativa (я не знаю, как ты хочешь output). Пример мог бы быть:

import numpy as np

# array con 15 puntos
a = np.random.randint(1,10,(15,2))
# array con 10 puntos
b = np.random.randint(1,10,(10,2))

# Función que calcula la distancia de un 
# punto de en 'a' a todos los puntos de 'b'
def calcula_distancias(point, arr, radio=1):
    dist = np.sqrt((point[0] - arr[:,0])**2 + (point[1] - arr[:,1])**2)
    indexes = dist <= radio
    return arr[indexes], indexes

for punto in a:
    print(punto, calcula_distancias(punto, b, radio=3)) # ajusta el radio

Функция возвращает тебе точки b что без той же дистанции или меньше radio. Ты мог бы делать это одной без необходимости for строя array дистанций, у которого были размеры (len(a), len(b)) и начиная с то же создание array booleanos, с которыми они были под radio но это оставило это как обязанности тому, который хочет.

1
ответ дан 03.12.2019, 17:28
  • 1
    Привет, большое спасибо, кажется, что функционирует эта solució n, что по радио относится, выражено в дистанции в метрах не? –  01.02.2017, 11:02
  • 2
    Так как он зависит có mo помести стоимость точек, что esté s используя, для радио deberí схвати использовать те же единицы. Пример не имеет в виду единицы. –  01.02.2017, 13:54