擅长:python、mysql、java
<p>谢谢@user7138814,除了做一些小改动,你的代码速度更快</p>
<pre><code>N=8
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[:,:2], gdata), axis=0)
[octantsort.append(data_i[dist_order[:N][j]]) for j in range(8)]
final = np.vstack(octantsort)
</code></pre>
<p>前一代码(问题代码)的执行时间:</p>
<pre><code> 0.021449804306030273 seconds
</code></pre>
<p>本帖代码执行时间:</p>
<pre><code> 0.0015172958374023438 seconds
</code></pre>