擅长:python、mysql、java
<p>我不确定,但是您可以通过从使用<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html" rel="nofollow noreferrer">scipy.spatial.distance.cdist 'euclidean'</a>结果得到的矩阵中获取<a href="http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.diagonal.html" rel="nofollow noreferrer">diagonal</a>来有效地做到这一点:</p>
<pre><code>#!/bin/python
import numpy as np
from scip.spatial.distance import cdist
pointListB = [(20,36),(47,32),(265,322)]
pointListA = [(13,45),(33,78),(360,240)]
A = np.array(pointListA)
B = np.array(pointListB)
distances = np.diagonal(cdist(A, B, 'euclidean'))
# Minimum distance:
min_dist = np.min(distances)
</code></pre>
<p>我们采用对角线的原因是<code>cdist</code>返回从a中的每个点到B中的每个点的距离矩阵。我担心的是,这将生成AxB中间结果来提取len(a)结果的向量。但它将在NumPy的低级(编译的二进制)代码中进行矢量化操作,并可能利用CPU自己的矢量指令集扩展(例如x86上的SSE)。你知道吗</p>
<p>我怀疑有某种方法可以消除额外的计算,但我知道的NumPy不够。你知道吗</p>