2

背景:我正在尝试使用 Python 和 sympy 制作一个非常简单的 gamma 函数分形绘图,最初是一个非常简单的版本来了解它的工作原理(基于 counter=0 或 1 的值的两种映射颜色)。

基本上,代码(如下)调用了 gamma 函数,然后进行了一些复数比较:只需检查复数“nextcomplex=gamma(mycomplex)”是否比初始“mycomplex”复数更接近“1+0i” . 制作分形的最终算法比这更复杂,但基本计算就像那些一样,所以我需要提高那个简单代码的速度。

对于小间隔它工作正常,我可以绘制值,但对于大间隔非常慢,我现在正在运行它,它已经超过 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

非常欢迎任何提示,谢谢!

4

1 回答 1

1

如果你只用数字做事情,那么使用像 NumPy 这样的数字库会好得多。SymPy 是为符号计算而设计的,虽然它可以执行数字计算,但速度不是很快。

除此之外,numba 可能能够提高循环的性能。

于 2015-09-05T17:23:10.407 回答