![](https://secure.gravatar.com/avatar/fc2baa22f0b0e9fc8dc93733cb94103c.jpg?s=120&d=mm&r=g)
Here's a way that uses convolution. from numpy import * v = array([0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0]) n=4 c = convolve(v, ones(n+1))[:len(v)] where((c==n) & (v==0)) This gives (array([ 6, 19]),) where 6 and 19 are off by one from the correct end indices. Maybe there's a more efficient way to do a convolution with this kind of rectangular window, using the cumulative sum for example. Alex Daniel Ashbrook wrote:
I'm trying to figure out a way to return the indices of the start and end of a run of consecutive elements that match some condition, but only if there are more than a certain number.
For example, take the array (with indices in comment for clarity):
#0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0]
I want to find the start and end indices of all runs of 1s with length of 4 or longer; so here the answer would be:
[[2,5], [15,18]]
Is there a reasonable way to do this without looping? I've been playing around with diff() and where() but without too much progress.
Thanks,
dan _______________________________________________ SciPy-user mailing list SciPy-user@scipy.org http://projects.scipy.org/mailman/listinfo/scipy-user