擅长:python、mysql、java
<p>我记得不久前见过这个。如果我没记错的话,我认为searchsorted会在数据不连续的情况下生成数据的临时副本。如果以后有时间,我会查看代码以确认发生了什么(或者也许更熟悉代码的人可以确认这一点)。在</p>
<p>同时,如果您不想重新构造代码以避免使用结构化数组,那么最好的选择可能是使用<code>bisect_left(a['f0'], 400.)</code>。在我的机器上,它比连续数组上的searchsorted慢8倍,但比非连续数组上的searchsorted快1000倍。在</p>
<pre><code>In [5]: a = np.arange((6e6)).view([('f0', float), ('f1', float)])
In [6]: timeit a['f0'].searchsorted(400.)
10 loops, best of 3: 51.1 ms per loop
In [7]: timeit a['f0'].copy()
10 loops, best of 3: 51 ms per loop
In [8]: timeit bisect_left(a['f0'], 400.)
10000 loops, best of 3: 52.8 us per loop
In [9]: f0 = a['f0'].copy()
In [10]: timeit f0.searchsorted(400.)
100000 loops, best of 3: 7.85 us per loop
</code></pre>