<div dir="ltr"><div><div><div><br></div>I'm pleased how little code is required to make a decent Mandelbrot Set image using Numpy + PIL, neither of which am I expert at using.  This is how one learns. :-D<br><br>Here's how it looks on my screen:<br><a href="https://flic.kr/p/uR81qU">https://flic.kr/p/uR81qU</a><br><br></div>For more about using fractals in teaching:<br><br></div><div>Fractals, Graphics, and Mathematics Education, <br>edited by Michael Frame and Benoit B. Mandelbrot <br>(c) 2002, Mathematical Association of America<br></div><div>ISBN: 0-88385-169-5<br><br></div><br><div>====<br><br>'''<br>Produces a decently high rez b/w graphic of Mandelbrot Set in <br>under a minute using default parameters.  Not super fast, but<br>conceptually useful both for the mathematics and for the demo<br>of numpy + PIL in an I-Python Notebook.<br><br>(cl) Kirby Urner, MIT License, 2015<br>Pilot study for O'Reilly School of Technology<br>Using I-Python Notebook + pillow (PIL fork) + in Anaconda distro<br>'''<br><br>from PIL import Image<br>import numpy as np<br><br>def setup(pixels=(3200,2400), offset=(-2.5, 1.2), inc=1/1000):<br>    '''<br>    Create patch of complex plane c for z = z**2 + c itereactions<br>    pixels(columns, rows), offset(left, top), inc = step<br>    '''<br>    x, y = pixels<br>    offx, offy = offset<br>    field = np.zeros((x, y)).astype(np.complex)<br>    for j in range(y):<br>        for i in range(x):<br>            field[i][j] = complex( offx + inc * i, offy - inc * j)<br>    return field<br><br>def mandelbrot_set(c):<br>    '''<br>    Apply Mandelbrot transform (orbit of 0) to c <br>    '''<br>    z = np.zeros(c.shape).astype(np.complex) # starts 0s<br>    for idx in range(100):<br>        z = z * z + c    <br>        idx = abs(z) >= 2  # continue weeding out<br>        z[idx] = 3+0j      # stamp out-of-bounds with 3<br>    <br>    newf = (abs(z) < 2).astype(np.ubyte) # keep those in set<br>    newf = newf * 255 # turn them white<br>    im = Image.fromarray(newf)<br>    im = im.rotate(90)<br>    return im<br><br>    <br>m = setup()<br>image = mandelbrot_set(m) # may take 30 seconds or more!<br>image.save('mandelbrot.png', "png")<br>image.show()<br><br></div></div>