2015-09-04 36 views
2

上下文:我試圖做一個非常簡單的伽馬函數分形繪圖使用Python和sympy,最初是一個非常簡單的版本,以瞭解它是如何工作的(基於計數器值= 0或1的兩種映射顏色)。我怎樣才能提高這個伽馬函數的速度和複數相關的代碼?

基本上代碼(下面)調用到伽馬函數,然後使一些複雜的比較次數:僅僅檢查複數「nextcomplex =伽瑪(mycomplex)」比越接近「1 + 0I」初始的「mycomplex」複數。最終的分形算法比這個更精細,但基本的計算就像那些,所以我需要提高這個簡單代碼的速度。

對於小的間隔它工作正常,我可以繪製值,但是對於很大的間隔非常緩慢,我現在正在運行它,並且它超過1小時,並且仍然運行總共test_limitn x test_limitm = 1000x1000元素。 (例如最大100x100去很好,我可以繪製的價值觀和看到一個非常基本的分形)

我的問題是:我怎麼能提高代碼,使其更快? (例如,其它的Python庫,或者有其他功能,更好的做比較,等等)

from sympy import gamma,I,re,im,zoo 
test_limitn = 1000 
test_limitm = 1000 
for m in range(-test_limitm,test_limitm): 
    for n in range(-test_limitn, test_limitn):   
     counter = 0 
     mycomplex = m+(n*I) 
     nextcomplex = gamma(mycomplex).evalf(1) 
     if mycomplex!=zoo and nextcomplex!=zoo: 
      absrenextcomplex = re(nextcomplex) 
      absimnextcomplex = abs(im(nextcomplex)) 

      if (abs(n) > absimnextcomplex) and (abs(1-m) > abs(1-absrenextcomplex)): 
       counter = 1 

任何暗示非常歡迎,謝謝!

回答

1

如果你只是在數值上做事情,那麼使用像NumPy這樣的數字庫會更好。 SymPy是爲符號計算而設計的,雖然它可以執行數值計算,但它並不是很快。

除此之外,numba可能能夠提高循環的性能。

+0

謝謝我將在星期一嘗試,並會回來:) – iadvd

相關問題