擅长:python、mysql、java
<p>这是一个基于NumPy的方法,使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html" rel="nofollow noreferrer">^{<cd1>}</a>-</p>
<pre><code>subs = from_array[:,None] - to_array
sq_eucliean_dist = np.einsum('ijk,ijk->ij',subs,subs)
eucliean_dist = np.sqrt(sq_eucliean_dist)
</code></pre>
<p><strong>注意:</strong>如果您以后要计算<code>np.mean(np.min(SomeDistanceArray,axis=0))</code>,您可以跳过<code>eucliean_dist</code>的计算,直接使用<code>sq_eucliean_dist</code>作为{<cd5>},因为计算平方根会非常昂贵。在</p>
<hr/>
<p><strong>什么是<code>np.einsum('ijk,ijk->ij',subs,subs)</code>做的?</strong>它在同一个数组<code>subs</code>之间执行元素乘法,即基本上是平方,然后沿着最后一个轴进行求和运算,因此在该约简过程中丢失了它。在</p>
<p>那么,为什么不显式地进行平方和求和呢?</strong>好吧,<code>np.einsum</code>的好处是它在一个步骤中同时进行平方和求和,给了我们显著的性能效率。在</p>
<p>因此,最后,如果<code>from_array</code>是<code>(N x 2)</code>数组,<code>to_array</code>是{<cd12>}数组,<code>np.einsum</code>的输出将是作为形状^{<cd14>的2D数组的欧几里德距离的平方。
关于字符串表示法本身的更多信息需要更长时间的讨论,其中一些可以在<a href="https://stackoverflow.com/questions/26089893/understanding-numpys-einsum">^{<cd15>}</a>和之前发布的官方文档链接中找到。在</p>