<br><br><div class="gmail_quote">On Mon, Aug 13, 2012 at 10:32 PM, Charles R Harris <span dir="ltr">&lt;<a href="mailto:charlesr.harris@gmail.com" target="_blank">charlesr.harris@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br><br><div class="gmail_quote"><div><div class="h5">On Sat, Aug 11, 2012 at 6:36 PM, Matthew Brett <span dir="ltr">&lt;<a href="mailto:matthew.brett@gmail.com" target="_blank">matthew.brett@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
A friend of mine just pointed out that dividing by int64 is<br>
considerably slower than multiplying in numpy:<br>
<br>
&lt;script&gt;<br>
from timeit import timeit<br>
<br>
import numpy as np<br>
import numpy.random as npr<br>
<br>
sz = (1024,)<br>
a32 = npr.randint(1, 5001, sz).astype(np.int32)<br>
b32 = npr.randint(1, 5001, sz).astype(np.int32)<br>
a64 = a32.astype(np.int64)<br>
b64 = b32.astype(np.int64)<br>
<br>
print &#39;Mul32&#39;, timeit(&#39;d = a32 * b32&#39;, &#39;from __main__ import a32, b32&#39;)<br>
print &#39;Div32&#39;, timeit(&#39;d = a32 / b32&#39;, &#39;from __main__ import a32, b32&#39;)<br>
print &#39;Mul64&#39;, timeit(&#39;d = a64 * b64&#39;, &#39;from __main__ import a64, b64&#39;)<br>
print &#39;Div64&#39;, timeit(&#39;d = a64 / b64&#39;, &#39;from __main__ import a64, b64&#39;)<br>
&lt;/script&gt;<br>
<br>
gives (64 bit Debian Intel system, numpy trunk):<br>
<br>
Mul32 2.71295905113<br>
Div32 6.61985301971<br>
Mul64 2.78101611137<br>
Div64 22.8217148781<br>
<br>
with similar values for numpy 1.5.1.<br>
<br>
Crude testing with Matlab and Octave suggests they do not seem to have<br>
this same difference:<br>
<br>
&gt;&gt; divtest<br>
Mul32 4.300662<br>
Div32 5.638622<br>
Mul64 7.894490<br>
Div64 18.121182<br>
<br>
octave:2&gt; divtest<br>
Mul32 3.960577<br>
Div32 6.553704<br>
Mul64 7.268324<br>
Div64 13.670760<br>
<br>
(files attached)<br>
<br>
Is there something specific about division in numpy that would cause<br>
this slowdown?<br>
<br></blockquote></div></div><div><br>Numpy is doing an integer divide unless you are using Python 3.x. The np.true_divide ufunc will speed things up a bit. I&#39;m not sure what Matlab/Octave are doing for division in this case.<br>

<br></div></div></blockquote><div><br>For int64:<br><br>In [23]: timeit multiply(a, b)<br>100000 loops, best of 3: 3.31 us per loop<br><br>In [24]: timeit true_divide(a, b)<br>100000 loops, best of 3: 9.35 us per loop<br>
 <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>Chuck<br></div></div><br>
</blockquote></div><br>