[Numpy-discussion] The NumPy Mandelbrot code 16x slower than Fortran

Mark Wiebe mwwiebe at gmail.com
Tue Jan 24 19:33:44 EST 2012


2012/1/21 Ondřej Čertík <ondrej.certik at gmail.com>

> <snip>
>
> Let me know if you figure out something. I think the "mask" thing is
> quite slow, but the problem is that it needs to be there, to catch
> overflows (and it is there in Fortran as well, see the
> "where" statement, which does the same thing). Maybe there is some
> other way to write the same thing in NumPy?
>

In the current master, you can replace

    z[mask] *= z[mask]
    z[mask] += c[mask]
with
    np.multiply(z, z, out=z, where=mask)
    np.add(z, c, out=z, where=mask)

The performance of this alternate syntax is still not great, but it is
significantly faster than what it replaces. For a particular choice of
mask, I get

In [40]: timeit z[mask] *= z[mask]

10 loops, best of 3: 29.1 ms per loop

In [41]: timeit np.multiply(z, z, out=z, where=mask)

100 loops, best of 3: 4.2 ms per loop


-Mark


> Ondrej
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20120124/0a9719a7/attachment.html>


More information about the NumPy-Discussion mailing list