Thanks, that&#39;s helpful. I&#39;m now getting comparable times on a different machine, it must be something else slowing down my machine more generally, not just numpy.<br><br><div class="gmail_quote">On Mon, Jun 20, 2011 at 5:11 PM, Eric Firing <span dir="ltr">&lt;<a href="mailto:efiring@hawaii.edu">efiring@hawaii.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On 06/20/2011 10:41 AM, Zachary Pincus wrote:<br>
&gt; You could try:<br>
&gt; src_mono = src_rgb.astype(float).sum(axis=-1) / 3.<br>
&gt;<br>
&gt; But that speed does seem slow. Here are the relevant timings on my machine (a recent MacBook Pro) for a 3.1-megapixel-size array:<br>
&gt; In [16]: a = numpy.empty((2048, 1536, 3), dtype=numpy.uint8)<br>
&gt;<br>
&gt; In [17]: timeit numpy.dot(a.astype(float), numpy.ones(3)/3.)<br>
&gt; 10 loops, best of 3: 116 ms per loop<br>
&gt;<br>
&gt; In [18]: timeit a.astype(float).sum(axis=-1)/3.<br>
&gt; 10 loops, best of 3: 85.3 ms per loop<br>
&gt;<br>
&gt; In [19]: timeit a.astype(float)<br>
&gt; 10 loops, best of 3: 23.3 ms per loop<br>
&gt;<br>
&gt;<br>
<br>
</div>On my slower machine (older laptop, core2 duo), you can speed it up more:<br>
<br>
In [3]: timeit a.astype(float).sum(axis=-1)/3.0<br>
1 loops, best of 3: 235 ms per loop<br>
<br>
In [5]: timeit b = a.astype(float).sum(axis=-1); b /= 3.0<br>
1 loops, best of 3: 181 ms per loop<br>
<br>
In [7]: timeit b = a.astype(np.float32).sum(axis=-1); b /= 3.0<br>
10 loops, best of 3: 148 ms per loop<br>
<br>
If you really want float64, it is still faster to do the first operation<br>
with single precision:<br>
<br>
In [8]: timeit b = a.astype(np.float32).sum(axis=-1).astype(np.float64);<br>
b /= 3.0<br>
10 loops, best of 3: 163 ms per loop<br>
<font color="#888888"><br>
Eric<br>
</font><div><div></div><div class="h5"><br>
<br>
&gt;<br>
&gt;<br>
&gt; On Jun 20, 2011, at 4:15 PM, Alex Flint wrote:<br>
&gt;<br>
&gt;&gt; At the moment I&#39;m using numpy.dot to convert a WxHx3 RGB image to a grayscale image:<br>
&gt;&gt;<br>
&gt;&gt; src_mono = np.dot(src_rgb.astype(np.float), np.ones(3)/3.);<br>
&gt;&gt;<br>
&gt;&gt; This seems quite slow though (several seconds for a 3 megapixel image) - is there a more specialized routine better suited to this?<br>
&gt;&gt;<br>
&gt;&gt; Cheers,<br>
&gt;&gt; Alex<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; NumPy-Discussion mailing list<br>
&gt;&gt; <a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; NumPy-Discussion mailing list<br>
&gt; <a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<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>