擅长:python、mysql、java
<p>如果您使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.arctan2.html" rel="nofollow noreferrer">^{<cd1>}</a>而不是<code>arctan</code>,那么这项工作就容易多了。然后对速度进行矢量化,我们可以得到如下结果:</p>
<pre><code>import numpy as np
from scipy.spatial.distance import cdist
delta = gdata - data[:,:2]
angles = np.arctan2(delta[:,1], delta[:,0])
bins = np.linspace(-np.pi, np.pi, 9)
bins[-1] = np.inf # handle edge case
octantsort = []
for i in range(8):
data_i = data[(bins[i] <= angles) & (angles < bins[i+1])]
dist_order = np.argsort(cdist(data_i, gdata))
octantsort.append(data_i[dist_order[:N]])
</code></pre>