2015-07-01 383 views
0

所以我有兩個2d列表與x和y座標,我想要通過list1,併爲每個點找到最接近的x,y座標在列表2中。它們的長度不同,如果我不使用list2的所有點,或者即使重複使用點,也可以,只要我在list1中只查看一次所有點。我需要移位本身以及兩點列表中的位置。我試圖用一個函數我在這個網站找到,但它似乎並不奏效:找到一個列表中最近的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錯,因爲它不會爲你創建一個二維表:

>>> 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)] 
相關問題