def mandelbrot(zmin, zmax, hpx, niter, func=lambda z, c: z**2 + c): vpx=round(hpx * abs((zmax-zmin).imag / (zmax-zmin).real)) z = zeros((vpx, hpx), dtype=complex128) x = linspace(zmin.real, zmax.real, hpx) y = linspace(zmin.imag, zmax.imag, vpx) cRe, cIm = meshgrid(x, y) c = cRe + cIm * 1j M = zeros((vpx,hpx)) for _ in range(niter): mask = find(abs(z)<2) M.flat[mask] = M.flat[mask] + 1 z.flat[mask] = func(z.flat[mask], c.flat[mask]) #z.flat[mask] = z.flat[mask]**2 + c.flat[mask] M.flat[mask] = 0 return M Mc = mandelbrot(-2.1+1.05j,0.7-1.05j,640,64) imshow(Mc) Mn3 = mandelbrot(-1.2+1.6j,1.2-1.6j,240,64, func=lambda z, c: z**3 + c) imshow(Mn3) Mn4 = mandelbrot(-1.2+1.6j, 1.2-1.6j, 320, 64, func=lambda z, c: z**4 + c) imshow(Mn4) Mn2_5 = mandelbrot(-1.6 + 1.2j, 1.6 - 1.2j, 320, 64, func=lambda z,c: z**2.5 + c) imshow(Mn2_5) Mn2_01i = mandelbrot(-2.2 + 1.2j, 1.0 - 1.2j, 320, 64, func=lambda z, c: z**(2 + 0.1j) + c) imshow(Mn2_01i) (3 + 2j)**(1 + 3j) Mp=mandelbrot(-2 + 1.05j, 0.8 - 1.05j, 320, 64, func=lambda z, c: z**2 + z + c) imshow(Mp)