2015-09-09 19 views
1

最近點,我開始使用Python最近,所以也許這是一個愚蠢的問題,但無論如何:發現在python

我有兩個數組CX。每個數組元素都是二維點。

例如:

C = [[1,1], [10,10]] 

X = [[1,2], [1,3], [2,1], [10,11], [10,12], [11,11], [12,11], [9,11]] 

欲組點從X圍繞最接近(歐幾里得距離)個C

例如最近從C點元件的X([1,2]) 1是C([1,1])第一元件,

用於X ([1,3])第二元件 - 的C([1,1])

再次第一元件...

爲最後一個元素在X([9,11]) - 第二個元素在C([10,10])

所以[1,1]是距離X 3分的最近元素,而[10, 10]距離X的5個元素最近。

我想在python F(C,X)一個函數,將返回的C每一個元素,元素的數量從X誰的C這個元素是最接近的。所以在這個例子中它應該返回[3,5]

我可以編寫自己的函數,但它不會有效,所以我很感興趣,如果在Python中有任何預定義的函數來解決我的問題?

謝謝

+0

你有沒有試過'scipy'? –

+0

你檢查過numpy,scipy或pandas嗎? – scytale

+0

http://codereview.stackexchange.com/questions/28207/finding-the-closest-point-to-a-list-of-points – dm295

回答

0

有可能是一個更快,但是這個做的工作:

import numpy as np 

C = [[1,1], [10,10]] 
X = [[1,2], [1,3], [2,1], [10,11], [10,12], [11,11], [12,11], [9,11]] 

def F(C,X): 
    Carr = np.array(C) 
    Xarr = np.array(X) 
    distances = [np.sum((Xarr - Carr[i])**2, axis=1) for i in range(len(C))] 
    closests = np.argmin(np.array(distances), axis=0) 
    return list(np.bincount(closests)) 

print(F(C,X)) 

會打印:

[3, 5]