<p>请参考@TommasoF答案。这个答案是错误的:<code>pdist</code>允许选择自定义距离函数。一旦答案不再被选为正确答案,我将删除它。</p>
<p>只是<code>scipy</code>的<code>pdist</code>不允许传入自定义距离函数。正如您可以在<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html" rel="nofollow noreferrer">docs</a>中看到的,您有一些选项,但是haverside distance不在支持的度量列表中。</p>
<p>(不过,Matlab<code>pdist</code>确实支持该选项,请参见<a href="http://www.mathworks.co.uk/help/stats/pdist.html" rel="nofollow noreferrer">here</a>)</p>
<p>您需要“手动”进行计算,即使用循环,类似这样的操作将起作用:</p>
<pre><code>from numpy import array,zeros
def haversine(lon1, lat1, lon2, lat2):
""" See the link below for a possible implementation """
pass
#example input (your's, truncated)
ResultArray = array([[ 53.3252628, -6.2644198 ],
[ 53.3287395 , -6.2646543 ],
[ 53.33321202 , -6.24785807],
[ 53.3253074 , -6.2644483 ]])
N = ResultArray.shape[0]
distance_matrix = zeros((N, N))
for i in xrange(N):
for j in xrange(N):
lati, loni = ResultArray[i]
latj, lonj = ResultArray[j]
distance_matrix[i, j] = haversine(loni, lati, lonj, latj)
distance_matrix[j, i] = distance_matrix[i, j]
print distance_matrix
[[ 0. 0.38666203 1.41010971 0.00530489]
[ 0.38666203 0. 1.22043364 0.38163748]
[ 1.41010971 1.22043364 0. 1.40848782]
[ 0.00530489 0.38163748 1.40848782 0. ]]
</code></pre>
<p>作为参考,可以在Python中找到Haverside的一个实现<a href="https://stackoverflow.com/questions/4913349/haversine-formula-in-python-bearing-and-distance-between-two-gps-points">here</a>。</p>