擅长:python、mysql、java
<p>这是一个向量化的方法,它从<code>1s</code>的索引中区分范围数组-</p>
<pre><code>def leftzeros_count(a):
idx = np.flatnonzero(a!=0)
return idx - np.arange(len(idx))
</code></pre>
<p>样本运行-</p>
^{pr2}$
<hr/>
<p><strong>运行时测试</strong></p>
<p>对于计时,让我们将给定样本平铺大量的时间和矢量化方法-</p>
<pre><code>In [7]: a = np.array([1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0])
In [8]: a = np.tile(a,100000)
# @Eric Duminil's soln
In [9]: %timeit (a == 0).cumsum()[a > 0]
100 loops, best of 3: 10.9 ms per loop
# Proposed in this post
In [10]: %timeit leftzeros_count(a)
100 loops, best of 3: 3.71 ms per loop
</code></pre>