In both versions your lsPhasedValues contains the number of positions in the array that match a certain criteria. What I need in that step is the unique values and not their positions. <br><br><div class="gmail_quote">2010/2/24 Robert Kern <span dir="ltr">&lt;<a href="mailto:robert.kern@gmail.com">robert.kern@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">On Wed, Feb 24, 2010 at 11:19, Bruno Santos &lt;<a href="mailto:bacmsantos@gmail.com">bacmsantos@gmail.com</a>&gt; wrote:<br>

&gt; It seems that the python 2.6.4 has a more efficient implementation of the<br>
&gt; lists. It runs faster on this version and slower on 2.5.4 on the same<br>
&gt; machine with debian. A lot faster in fact.<br>
&gt; I was trying to change my headche for the last couple of weeks. But you<br>
&gt; migth give me a lot more optimizations that I can pick. I am trying to<br>
&gt; optimize the following function<br>
&gt; def hypergeometric(self,lindex,rindex):<br>
&gt;         &quot;&quot;&quot;<br>
&gt;         loc.hypergeometric(lindex,rindex)<br>
&gt;         Performs the hypergeometric test for the loci between lindex and<br>
&gt; rindex.<br>
&gt;         Returns the minimum p-Value<br>
&gt;         &quot;&quot;&quot;<br>
&gt;         aASense = self.aASCounts[lindex*nSize:(rindex+1)*nSize]<br>
&gt;         #Create the subarray to test<br>
&gt;         aLoci =<br>
&gt; numpy.hstack([self.aSCounts[lindex*nSize:(rindex+1)*nSize],aASense[::-1]])<br>
&gt;         #Get the values to test<br>
&gt;         length = len(aLoci)<br>
&gt;         lsPhasedValues = set([aLoci[i] for i in xrange(length) if i%nSize==0<br>
&gt; and aLoci[i]&gt;0])<br>
&gt;         m = length/nSize<br>
&gt;         n = (length-1)-(length/nSize-1)<br>
&gt;         #Create an array to store the Pvalues<br>
&gt;         lsPvalues = []<br>
&gt;         append = lsPvalues.append<br>
&gt;         #Calculate matches in Phased and non Phased position<br>
&gt;         for r in lsPhasedValues:<br>
&gt;             #Initiate number of matches to 0<br>
&gt;             q = sum([1 for j in xrange(length) if j%nSize==0 and<br>
&gt; aLoci[j]&gt;=r])<br>
&gt;             k = sum([1 for j in xrange(length) if aLoci[j]&gt;=r])<br>
&gt;             key = &#39;%i,%i,%i,%i&#39;%(q-1,m,n,k)<br>
&gt;             try:append(dtPhyper[key])<br>
&gt;             except KeyError:<br>
&gt;                 value = self.lphyper(q-1, m, n, k)<br>
&gt;                 append(value)<br>
&gt;                 dtPhyper[key]=value<br>
&gt;         return min(lsPvalues)<br>
&gt; Is there any efficient way to test the array simultaneous for two different<br>
&gt; conditions?<br>
<br>
</div></div>j = np.arange(length)<br>
j_nSize_mask = ((j % nSize) == 0)<br>
lsPhasedValues = (j_nSize_mask &amp; (aLoci &gt;= 0)).sum()<br>
...<br>
    bigALoci = (aLoci &gt;= r)<br>
    q = (j_nSize_mask &amp; bigALoci).sum()<br>
    k = bigALoci.sum()<br>
<br>
<br>
Another way to do it:<br>
<br>
j_nSize = np.arange(0, length, nSize)<br>
lsPhasedValues = (aLoci[j_nSize] &gt;= 0).sum()<br>
...<br>
    q = (aLoci[j_nSize] &gt;= r).sum()<br>
    k = (aLoci &gt;= r).sum()<br>
<font color="#888888"><br>
<br>
--<br>
</font><div><div></div><div class="h5">Robert Kern<br>
<br>
&quot;I have come to believe that the whole world is an enigma, a harmless<br>
enigma that is made terrible by our own mad attempt to interpret it as<br>
though it had an underlying truth.&quot;<br>
  -- Umberto Eco<br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</div></div></blockquote></div><br>