首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用matplotlib +在python上设置Mandelbrot需要一些建议

使用matplotlib +在python上设置Mandelbrot需要一些建议
EN

Stack Overflow用户
提问于 2015-03-29 00:56:56
回答 1查看 831关注 0票数 0

这是我在这里的第一篇文章,所以如果我没有遵守规则,我很抱歉

现在,我已经尝试过在没有任何复杂参数的情况下编写mandelbrot序列,但实际上是“手工”编写的。

例如,如果Z(n)是我的复数(x+iy)变量,C(n)是我的复数(c+ik)

我把这个序列写成{x(n)=x(n-1)^2-y(n-1)^2+c;y(n)=2.x(n-1).y(n-1)+c}

代码语言:javascript
复制
from math import *
import matplotlib.pyplot as plt

def mandel(p,u):
    c=5
    k=5
    for i in range(p):
        c=5
        k=k-10/p
        for n in range(p):
            c=c-10/p
            x=0
            y=0
            for m in range (u):
                x=x*x-y*y + c
                y=2*x*y + k
                if sqrt(x*x+y*y)>2:
                    break
            if sqrt(x*x+y*y)<2:
                X=X+[c]
                Y=Y+[k]
        print (round((i/p)*100),"%")
    return (plt.plot(X,Y,'.')),(plt.show())

P是我想要的复杂参数的宽度和数量,u是迭代的次数

这是我得到的结果:

我觉得这和我想要的有点接近。

现在我的问题是,怎样才能让函数更快呢?我怎样才能让它变得更好呢?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-03-29 01:17:25

一个很好的起点是分析你的代码。

https://docs.python.org/2/library/profile.html

如果我不得不在没有亲自分析的情况下进行猜测,那么你的数组追加可能效率很低。

您可以使用预先设置为适当大小的numpy数组,或者在纯python中,您可以创建一个具有给定大小(如50)的数组并遍历整个数组。填满后,将该数组追加到主数组中。这减少了必须重建阵列的次数。使用numpy数组也可以做到这一点。

不过,你可以做一些快速的事情

代码语言:javascript
复制
if sqrt(x*x+y*y)>2:

应该变成这样

代码语言:javascript
复制
if x*x+y*y>4:

如果可以的话,删除对sqrt的调用,只需将另一端乘以2会更快。乘法比求根更便宜。

你可以做的另一件事是。

代码语言:javascript
复制
print (round((i/p)*100),"%")

应该变成这样

代码语言:javascript
复制
# print (round((i/p)*100),"%")

你想要更快的code?...remove与实际绘图无关的东西。

此外,在比较之后中断一个for循环,然后在比较之后生成您想要的相同的comparison...Do,然后中断it...No需要计算两次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29319916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档