擅长:python、mysql、java
<p>如果范围的数量不是太大,可以手动创建它们</p>
<pre><code> gm09 = xdata >= -0.9
gm06 = xdata >= -0.6
g0 = xdata >= 0
ranges = [xdata[gm09 & ~gm06], xdata[gm06 & ~g0]]
result = [f(r) for r in ranges]
</code></pre>
<p>其中f是你的scipy函数。在</p>
<p>如果范围数很大,可以对数据进行排序,然后使用
<code>searchsorted</code>。假设排序数组<code>bnd</code>中有块的边界:</p>
^{pr2}$
<p>请注意,这与第一个解决方案的不同之处在于,您的范围将被排序。在</p>
<p>如果需要保留原始顺序,可以使用间接排序</p>
<pre><code>order = np.argsort(xdata)
xbnd = np.searchsorted(xdata[order], bnd)
ordord = [np.sort(order[l:r]) for l, r in zip(xbnd[:-1], xbnd[1:])]
ranges = [xdata[oo] for oo in ordord]
result = [f(r) for r in ranges]
</code></pre>