2015-09-04 5 views
2

Контекст: Я пытаюсь сделать очень простую фрактальную функцию гамма-функции с использованием Python и sympy, изначально очень простой версии, чтобы понять, как она работает (два цвета отображения, основанные на значении счетчика = 0 или 1).Как я могу увеличить скорость этой гамма-функции и сложного кода, связанного с цифрами?

В основном код (ниже) вызывает к гамма-функции, а затем делает некоторые сложные сравнения чисел: просто проверяет, что комплексное число «nextcomplex = гамма (mycomplex)» ближе к «1 + 0i», чем начальное комплексное число «mycomplex». Окончательный алгоритм для фрактала более разработан, чем тот, но основные вычисления похожи на те, поэтому мне нужно будет увеличить скорость этого простого кода.

Для небольших интервалов он отлично работает, и я могу отображать значения, но очень медленно для больших интервалов, я запускаю его прямо сейчас, и это более 1 часа и все еще работает в общей сложности test_limitn x test_limitm = 1000x1000 элементы. (например, до 100х100 идет хорошо, и я могу построить значения и увидеть очень простой фрактал)

Мой вопрос: как я могу повысить код, чтобы сделать это быстрее? (Например, другие библиотеки 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