<br><br><div class="gmail_quote">On Mon, Jul 20, 2009 at 9:39 AM, Keith Goodman <span dir="ltr">&lt;<a href="mailto:kwgoodman@gmail.com">kwgoodman@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Using a trick that Robert Kern recently posted to the list makes the<br>
identity function much faster.<br>
<br>
Current version:<br>
<br>
def identity(n, dtype=None):<br>
 á áa = array([1]+n*[0],dtype=dtype)<br>
 á áb = empty((n,n),dtype=dtype)<br>
 á áb.flat = a<br>
 á áreturn b<br>
<br>
Proposed version:<br>
<br>
def myidentity(n, dtype=None):<br>
 á áa = zeros((n,n), dtype=dtype)<br>
 á áa.flat[::n+1] = 1<br>
 á áreturn a<br>
<br>
&gt;&gt; timeit identity(1)<br>
100000 loops, best of 3: 14.9 Ás per loop<br>
&gt;&gt; timeit identity(10)<br>
10000 loops, best of 3: 20 Ás per loop<br>
&gt;&gt; timeit identity(100)<br>
1000 loops, best of 3: 696 Ás per loop<br>
&gt;&gt; timeit identity(1000)<br>
10 loops, best of 3: 73.6 ms per loop<br>
<br>
&gt;&gt; timeit myidentity(1)<br>
100000 loops, best of 3: 6.57 Ás per loop<br>
&gt;&gt; timeit myidentity(10)<br>
100000 loops, best of 3: 7.08 Ás per loop<br>
&gt;&gt; timeit myidentity(100)<br>
100000 loops, best of 3: 16.4 Ás per loop<br>
&gt;&gt; timeit myidentity(1000)<br>
100 loops, best of 3: 5.92 ms per loop<br>
<br>
It would also speed up the functions that use identity (for example<br>
np.linalg.inv). And it would make identity faster than eye.<br>
<br>
Are there any corner cases that the new version doesn&#39;t handle? Any<br>
other issues?</blockquote><div><br>I believe r7130 made the change. <br><br>Chuck<br></div><br></div><br>