<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
<i>
<blockquote type="cite">
  <meta http-equiv="content-type"
 content="text/html; charset=ISO-8859-1">
  <span class="Apple-style-span"
 style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;">
  <pre>&gt;<i> Given a certain value delta, I would like to get a subset of x, named
</i>&gt;<i> y, 
</i>&gt;<i> where (y[i+1] - y[i]) &gt;= delta
</i>
So in fact the problem is to find y such that

(y[i(k)+n] - y[i(k)]) &gt;= delta
for n &lt;= len(x) - 1 - i
and i(0) = 0, i(k+1) = i(k) + n 

? Well a loop or list comparison seems like a good choice to me. It is
much more obvious at the expense of two LOCs. Did you profile the two
possibilities and are they actually performance-critical?

cheers

Am Mittwoch, den 09.06.2010, 10:14 +0200 schrieb "V. Armando Sol&eacute;":
&gt;<i> That was my first thought, but that only warrants me to skip one point 
</i>&gt;<i> in x but not more than one.
</i>&gt;<i> 
</i>&gt;<i>  &gt;&gt;&gt; x= numpy.arange(10.)
</i>&gt;<i>  &gt;&gt;&gt; delta = 3
</i>&gt;<i>  &gt;&gt;&gt; print x[(x[1:] - x[:-1]) &gt;= delta]
</i>&gt;<i> []
</i>&gt;<i> 
</i>&gt;<i> instead of the requested [0, 4, 8]
</i>&gt;<i> 
</i>&gt;<i> Armando
</i>&gt;<i> 
</i>&gt;<i> Francesc Alted wrote:
</i>&gt;<i> &gt; A Wednesday 09 June 2010 10:00:50 V. Armando Sol&eacute; escrigu&eacute;:
</i>&gt;<i> &gt;   
</i>&gt;<i> &gt;&gt; Well, this seems to be quite close to what I need
</i>&gt;<i> &gt;&gt;
</i>&gt;<i> &gt;&gt; y = numpy.cumsum((x[1:]-x[:-1])/delta).astype(numpy.int)
</i>&gt;<i> &gt;&gt; i1 = numpy.nonzero(y[1:] &gt; y[:-1])
</i>&gt;<i> &gt;&gt; y = numpy.take(x, i1)
</i>&gt;<i> &gt;&gt;     
</i>&gt;<i> &gt;
</i>&gt;<i> &gt; Perhaps this is a bit shorter:
</i>&gt;<i> &gt;
</i>&gt;<i> &gt; y = x[(x[1:] - x[:-1]) &gt;= delta]
</i>&gt;<i> &gt;
</i>&gt;<i> &gt;   
</i>&gt;<i> 
</i>&gt;<i> 
</i>&gt;<i> _______________________________________________
</i>&gt;<i> NumPy-Discussion mailing list
</i>&gt;<i> <a
 href="http://mail.scipy.org/mailman/listinfo/numpy-discussion">NumPy-Discussion@scipy.org</a>
</i>&gt;<i> <a
 href="http://mail.scipy.org/mailman/listinfo/numpy-discussion">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a></i></pre>
  </span></blockquote>
</i><br>
<br>
Playing around with range/arange can be misleading as<span
 class="Apple-style-span"
 style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"></span><br>
&gt;&gt; x[x%4==0]<br>
array([ 0.,&nbsp; 4.,&nbsp; 8.])<br>
<br>
I don't know you really want because your first code <br>
&gt;&gt;&gt; x= numpy.arange(10.)<br>
&gt;&gt;&gt; delta=3<br>
&gt;&gt;&gt; y=[x[0]]<br>
&gt;&gt;&gt; for value in x:<br>
...&nbsp;&nbsp;&nbsp;&nbsp; if (y[-1] -value) &lt; delta:<br>
...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y.append(value)<br>
... <br>
&gt;&gt;&gt; y<br>
[0.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]<br>
<br>
Which is not [0, 4, 8].<br>
<br>
Bruce <br>
<br>
<br>
</body>
</html>