2015-08-08 79 views
1

我有一個10×10的網格單元格(作爲一個numpy數組)。我在這個網格上還有一個3點的列表。對於網格上的每個單元格,我需要找到三個點中最接近的點。我可以在python(2.7)中使用一系列嵌套循環來做到這一點,但它很慢(特別是如果我升級到更大的網格),但我懷疑有更快的方法。有沒有人有什麼建議?計算網格上的距離​​

+0

分享示例輸入,輸出和你的for循環代碼的嘗試? – Divakar

回答

0

我知道計算平面上兩點之間距離的最簡單方法是使用畢達哥拉斯定理。

也就是說,畫出一個直角三角形,其中斜邊位於兩點之間,三角形的底邊平行於x軸,高度平行於y軸。然後我們知道距離(用斜邊的長度表示)h遵守如下:h^2 = a^2 + b^2,其中a和b是三角形的其餘邊的長度。

沒有看到您的代碼很難給任何其他幫助。你有沒有嘗試類似的東西呢?如果您想要更具體的答案,您需要更多地指定您的問題。

0

如果我們假設你知道點座標,那麼你可以使用距離公式計算單元和點之間的距離:https://en.wikipedia.org/wiki/Distance

因此,例如,讓我們說,你的對應「 x',你的3點對應於y1,y2和y3。您可以簡單地獲得x - y1,x - y2和x - y3之間的距離,然後比較三個距離。

如果我們假設你不知道點座標,那麼你首先必須找到點座標。您可以通過掃描您的網格並確定一個單元是否對應一個點座標來查找點座標。當你找到你所有的點時,你可以使用公式距離找到最近的距離。

0

scipi中有函數euclidean,它將計算點之間的距離,如果你想遍歷它們。

from scipy.spatial.distance import euclidean 
import numpy as np 

a = np.array([1, 1, 1]) 
b = np.array([2, 2, 2]) 
dist = euclidean(a, b) 

但我認爲對於大型數據集,你會使用scipik-d tree瓶坯搜索的更好。