如何提高此伽玛函数和复数相关代码的速度?

时间:2015-09-04 06:05:37

标签: python sympy complex-numbers gamma-function

  

上下文:我正在尝试使用Python和sympy进行非常简单的伽玛函数分形绘图,最初是一个非常简单的版本,以了解它是如何工作的(两种映射颜色基于counter = 0或1的值)。

基本上代码(下面)调用gamma函数,然后进行一些复数的比较:只检查复数" nextcomplex = gamma(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 个答案:

答案 0 :(得分:1)

如果你只是用数字方式做事,那么使用像NumPy这样的数字库会更好。 SymPy专为符号计算而设计,虽然它可以执行数值计算,但它并不是很快。

除此之外,numba可能能够改善循环的性能。