<p>您可以通过调用实现智能算法的库<a href="http://scikit-learn.org/stable/modules/neighbors.html#nearest-neighbor-algorithms" rel="nofollow noreferrer">very efficiently</a>来实现这一点,一个例子是sklearn,它有一个<a href="http://scikit-learn.org/stable/modules/neighbors.html#finding-the-nearest-neighbors" rel="nofollow noreferrer">^{<cd1>}</a>方法来实现这一点。</p>
<p>为此修改的代码示例:</p>
<pre><code>from sklearn.neighbors import NearestNeighbors
import numpy as np
def distance(p1, p2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
lon1, lat1 = p1
lon2, lat2 = p2
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
c = 2 * np.arcsin(np.sqrt(a))
km = 6367 * c
return km
points = [[25.42, 55.47],
[25.39, 55.47],
[24.48, 54.38],
[24.51, 54.54]]
nbrs = NearestNeighbors(n_neighbors=2, metric=distance).fit(points)
distances, indices = nbrs.kneighbors(points)
result = distances[:, 1]
</code></pre>
<p>它给予</p>
<pre><code>>>> result
array([ 1.889697 , 1.889697 , 17.88530556, 17.88530556])
</code></pre>