我已經看過其他關於這個問題,但我似乎無法弄清楚我要去哪裏錯了。我們的目標是「編寫一個程序來生成Mandelbrot集的圖像,方法是對跨越-2≤x≤2和-2≤y區域的N×N網格執行c = x + iy的所有值的迭代≤2.製作一張密度圖,Mandelbrot集內的網格點顏色爲黑色,而外部的顏色爲白色。「當在Mandelbrot集合中被認爲當z'= z^2 + c迭代時,z的大小從不大於2。在Python中設置簡單的Mandelbrot
我的代碼產生一個幾乎完全黑色的網格,並帶有一個白色的小切口。
from pylab import imshow,show,gray
from numpy import zeros,linspace
z = 0 + 0j
n=100
M = zeros([n,n],int)
xvalues = linspace(-2,2,n)
yvalues = linspace(-2,2,n)
for x in xvalues:
for y in yvalues:
c = complex(x,y)
for i in range(100):
z = z*z + c
if abs(z) > 2.0:
M[y,x] = 1
break
imshow(M,origin="lower")
gray()
show()
對於任何未來的讀者,這是我新的代碼是如何結束了尋找:
from pylab import imshow,show,gray
from numpy import zeros,linspace
n=1000
M = zeros([n,n],int)
xvalues = linspace(-2,2,n)
yvalues = linspace(-2,2,n)
for u,x in enumerate(xvalues):
for v,y in enumerate(yvalues):
z = 0 + 0j
c = complex(x,y)
for i in range(100):
z = z*z + c
if abs(z) > 2.0:
M[v,u] = 1
break
imshow(M,origin="lower")
gray()
show()
謝謝!我能夠得到它的工作。我還沒有學過枚舉函數,所以非常有用! –
@NoraBailey我很高興你喜歡它。在使用純Python時,'enumerate'是一個非常方便的函數,但它對於Numpy很有用,因爲通常你讓Numpy爲你循環查看,就像我在我的答案中添加的新信息中提到的那樣。 –
@NoraBailey你可能會喜歡這個http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch20s03.html它涵蓋了Python中的其他列表處理實用程序:) –