擅长:python、mysql、java
<p>下面是一个使用<code>itertools.takewhile()</code>的python方法:</p>
<pre><code>from itertools import takewhile
sum(1 for _ in takewhile(np.isfinite, a))
</code></pre>
<p>在{<cd2>}方法中使用生成器表达式进行基准测试:<sup>1</sup></p>
^{pr2}$
<p>但仍然(到目前为止)慢于numpy方法:</p>
<pre><code>In [119]: %timeit np.isnan(a).argmax()
100000 loops, best of 3: 16.8 µs per loop
</code></pre>
<hr/>
<p><sub>
1这种方法的问题是使用<code>enumerate</code>函数。它首先从numpy数组返回一个<code>enumerate</code>对象(它是一个类似迭代器的对象),调用生成器函数和迭代器的<code>next</code>属性需要时间。
</sub></p>