使用matplotlib/pyplot/numpy/python绘制Mandelbrot

nil*_*esh 9 python numpy matplotlib scientific-computing

我是python的新手,并通过Python"科学讲义发布2013.1"教程学习.请帮助我在下面的srcreenshot中解决这个Mandelbrot问题(第71页).如果可能的话,请提供带解释的逐步命令,因为编程概念对我来说是新的.

http://dl.dropbox.com/u/50511173/mandelbrot.png

我试着解决这个问题如下:

import numpy as np
import matplotlib.pyplot as plt

x,y=np.ogrid[-2:1:10j,-1.5:1.5:10j]
c=x + 1j*y
z=0
for g in range(50):
  z=z**2 + c

plt.imshow(z.T, extent=[-2,1,-1.5,1.5])
Run Code Online (Sandbox Code Playgroud)

我遇到以下错误"TypeError:图像数据无法转换为浮动"

这个错误究竟意味着什么以及如何纠正它?我发现很难理解imshow()函数.imshow()中的个别术语是什么意思?

谢谢.

Jai*_*ime 5

Mandelbrot集合并不是z您试图绘制的值,因为它们是复数而给您带来问题.Mandelbrot集由p复数平面的点组成,其中递归关系z_n = z_n-1**2 + p保持有界.通过将几次迭代后的结果与某个阈值进行比较,以实用的方式检查.在您的情况下,如果在for循环后添加以下行:

threshold = 2
mask = np.abs(z) < threshold
Run Code Online (Sandbox Code Playgroud)

然后绘图mask你应该在屏幕上看到设定的情节.

要理解imshow论证的一般工作原理,你最好先阅读文档,而不是在这里提问.


nil*_*esh 5

感谢@Jan和@Jaime.我得到它如下工作,虽然需要花费太多时间来计算:

import numpy as np
import scipy as sp
import matplotlib.pyplot as plt


x,y=np.ogrid[-2:1:5000j,-1.5:1.5:5000j]

print('')
print('Grid set')
print('')

c=x + 1j*y
z=0

for g in range(500):
        print('Iteration number: ',g)
        z=z**2 + c

threshold = 2
mask=np.abs(z) < threshold

print('')
print('Plotting using imshow()')
plt.imshow(mask.T,extent=[-2,1,-1.5,1.5])

print('')
print('plotting done')
print('')

plt.gray()

print('')
print('Preparing to render')
print('')

plt.show()
Run Code Online (Sandbox Code Playgroud)

图像结果