擅长:python、mysql、java
<p>这在很大程度上取决于数据。似乎您正在试图找到一种有效的方法来返回数组中某个内容的第一个索引。嗯,<a href="https://stackoverflow.com/questions/432112/">there isn't an efficient one in ^{<cd1>}</a>因为在<code>numpy</code>中只允许整个数组的迭代,而<a href="https://stackoverflow.com/a/41578614/3044825">you can use ^{<cd3>}</a>是为了优于<code>numpy</code></p>
<p>如果您需要对列表中的一大部分或一小部分求和,<code>numpy</code>是一个不错的选择:</p>
<pre><code>zero_idx = np.where(data3==0)[0]
max_loc = np.searchsorted(zero_idx, np.argmax(data3))
start, end = zero_idx[max_loc - 1], zero_idx[max_loc]
total_sum = np.sum(data3[start:end])
</code></pre>
<p>否则,使用pythonic<code>index</code>方法(或<code>numba</code>):</p>
<pre><code>k = np.argmax(data3)
left_list = data3[k:].tolist()
right_list = data3[k::-1].tolist()
s1 = np.sum(data3[k: k + left_list.index(0)])
s2 = np.sum(data3[k - right_list.index(0): k])
total_sum = s1 + s2
</code></pre>
<p><strong>基准。</strong>
我得到的第一种方法是在Jupyter笔记本中使用<code>%timeit</code>decorator,速度快20倍:</p>
<pre><code>512 µs ± 34.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
10.2 ms ± 146 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>