2015-07-01 4 views
0

поэтому у меня есть два 2d-списка с координатами x и y, и я хочу пройти через list1, и для каждой точки найдите ближайшие координаты x, y в списке2. Они имеют разную длину, и все в порядке, если я не использую все точки списка2 или даже если я повторно использую точки, если я просматриваю все точки только один раз в списке1. Мне нужен сам сдвиг, а также расположение в списках обеих точек. Я попытался с помощью функции я нашел на этом сайте, но не кажется, что это будет работать:найти ближайшую позицию x, y в одном списке к позиции x, y в другой?

def do_kdtree(combined_x_y_arrays,points): 
    mytree = scipy.spatial.cKDTree(combined_x_y_arrays) 
    dist, indexes = mytree.query(points) 
    return dist,indexes 

#Perhaps it's not doing what I wanted it to do. Here is what I tried: 

s_x = ([1.0,2.0,3.0]) 
s_y = ([1.5,2.5,3.5]) 
SDSS_x = ([3.0,4.0,5.0]) 
SDSS_y = ([3.5,4.5,5.5]) 

list1 = zip([s_x],[s_y]) 
list2 = zip([SDSS_x],[SDSS_y]) 


shift,place_in_array = do_kdtree(list1,list2) 

и Я получаю ошибку:

Traceback (most recent call last): 
    File "tester.py", line 23, in <module> 
    shift,place_in_array = do_kdtree(list1,list2) 
    File "tester.py", line 9, in do_kdtree 
    mytree = scipy.spatial.cKDTree(combined_x_y_arrays) 
    File "ckdtree.pyx", line 811, in scipy.spatial.ckdtree.cKDTree.__init__ (scipy/spatial/ckdtree.c:7157) 
ValueError: too many values to unpack (expected 2) 

Я получаю впечатление это означает, что функция WASN» ожидая двумерных списков, что означало бы, что эта функция действительно не делает то, что я хотел этого сделать. Я даже не уверен, что возвращается «индексы», и если это действительно точка в списке, то я и надеялся. Если это так, может кто-нибудь сказать мне, есть ли существующая функция, которую я могу использовать для этого?

+0

Просто мысли - расстояние формула вычисляет расстояние между двумя точками. Если вам нужен набор с самым близким расстоянием. Вычислите расстояние между множеством. Это наивное решение, но это хорошее начало – Dudemanword

ответ

0

вы используете zip неправильно, поскольку это не будет создавать 2d-список для вас:

>>> s_x = ([1.0,2.0,3.0]) 
>>> s_y = ([1.5,2.5,3.5]) 

>>> list1_broken = zip([s_x],[s_y]) 
>>> print list1_broken 
[([1.0, 2.0, 3.0], [1.5, 2.5, 3.5])] 

>>> list1 = zip(s_x,s_y) 
>>> print list1 
[(1.0, 1.5), (2.0, 2.5), (3.0, 3.5)] 
Смежные вопросы