神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码,matplotlib numpy,tensorflow)分别实现

Mandelbrot图实际上是由Mandelbrot集合构成的图像。

Mandelbrot集合的定义如下:
zn+1=zn2+cz_{n+1}=z^2_n+c zn+1​=zn2​+c
其中,c是一个复数。加入给定一个复数z0z_0z0​,比如z0z_0z0​=0,那么这个递推式会生成一个序列:[z0,z1,z2,z3,z4...][z_0,z_1,z_2,z_3,z_4...][z0​,z1​,z2​,z3​,z4​...]。如果这个序列收敛在一个有限值范围内,那么c就在Mandelbrot集合中。当序列中有一项的绝对值大于2时,这个序列一定趋向于无穷,一般说来,如果这个序列前60项都没有一项大于2,那么可以认为这时c就在Mandelbrot集合中。

// 一行代码实现曼德布洛特
//原理:Mandelbrot 图像中的每个位置都对应于公式N=x+y*i中的一个复数
print ('\n'.join([''.join(['*'if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0 else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))<2 else ' ' for x in range(-80,20)]) for y in range(-20,20)]))

//参考以下这位老兄的代码使用matplotlib numpy 曼德尔布罗特集合
// https://blog.csdn.net/DarrenXf/article/details/82563471
import numpy as np
import matplotlib.pyplot as plt
def mandelbrot(h,w,maxit=20):y,x = np.ogrid[-1.4:1.4:h*1j,-2:0.8:w*1j]c = x+y*1jz = c divtime = maxit + np.zeros(z.shape,dtype=int)for i in range(maxit):z = z**2 +cdiverge = z*np.conj(z) > 2**2div_now = diverge & (divtime==maxit)divtime[div_now] = i z[diverge] = 2 return divtimeplt.imshow(mandelbrot(500,500))
plt.show()

// 虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子。
// 实际上,这是tensorflow一个非常直截了当的可视化运用。
// 原文:TensorFlow社区
// http://www.tensorfly.cn/tfdoc/tutorials/mandelbrot.html
import tensorflow as tf
import numpy as np
#导入可视化
import PIL.Image
// 原文使用from cStringIO import StringIO 这个是python2中的io库
// 在这里我们使用的是python3.7
from io import BytesIO
from IPython.display import Image, display
import matplotlib.pyplot as plt#显示迭代计算出的图像
def DisplayFractal(a, fmt = 'jpeg'):#a_cyclic = (6.28 * a / 20.0).reshape(list(a.shape) + [1])img = np.concatenate([10 + 20 * np.cos(a_cyclic),30 + 50 * np.sin(a_cyclic),155 - 80 * np.cos(a_cyclic)], 2)img[a == a.max()] = 0a = imga = np.uint8(np.clip(a, 0, 255))f = BytesIO()PIL.Image.fromarray(a).save(f, fmt)plt.imshow(img)plt.show()sess = tf.InteractiveSession()#使用Numpy创建一个在[-2,2]x[-2,2]范围内的2维复数数组
Y,X = np.mgrid[-1.3 : 1.3 : 0.005, -2:1:0.005]
Z = X + 1j*Y#定义张量
xs = tf.constant(Z.astype(np.complex64))
zs = tf.Variable(xs)
ns = tf.Variable(tf.zeros_like(xs, tf.float32))tf.global_variables_initializer().run()#计算一个新值z : z^2 + x
zs_ = zs * zs + xs#这个新值会发散么?
not_diverged = tf.abs(zs_) < 4#更新zs并且迭代计算。
#说明:在这些值发散之后,我们仍然在计算zs,这个计算消耗特别大!
#如果稍微简单点,这里有更好的方法来处理。
step = tf.group(
zs.assign(zs_),
ns.assign_add(tf.cast(not_diverged, tf.float32))
)for i in range(200): step.run()DisplayFractal(ns.eval())

神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码,matplotlib numpy,tensorflow)分别实现相关推荐

  1. TensorFlow 教程 --教程--2.9曼德布洛特(Mandelbrot)集合

    虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子.实际上,这是tensorflow一个非常直截了当的可视化运 ...

  2. TensorFlow:曼德布洛特(Mandelbrot)集合

    TensorFlow:曼德布洛特(Mandelbrot)集合

  3. Tensorflow教程-曼德布洛特(Mandelbrot)集合

    曼德布洛特(Mandelbrot)集合 虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子.实际上,这是ten ...

  4. 曼德布洛特(Mandelbrot)集合

    说明:使用python3.6.tensorflow1.3,windows环境. # 导入仿真库 import tensorflow as tf import numpy as np # 导入可视化库 ...

  5. python读法1002python读法-Python教程之绘制Mandelbrot集合

    原标题:Python教程之绘制Mandelbrot集合 一. 分形与混沌 自然界的很多事物,如树木.云彩.山脉.雪花.海岸线等,都呈现出传统几何学所不能描述的形状,这些形状都有如下的特性: 有着十分精 ...

  6. Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)

    Python编程语言学习:仅需一行代码将字符串化的数字数组.int数组.float数组实现之间互换(将一个字符串数组转换成整型数组) 目录

  7. 【Python line_profiler memory_profiler】分析每一行代码的耗时及内存占用情况

    一.Python 借助 line_profiler 模块 查看每一行耗了多少时间? 1. 安装 windows10.python3.7.4安装,安装得个2分钟左右 pip install line_p ...

  8. 【Python】Modin,只需一行代码加速你的Pandas

    本文翻译自:Shrivarsheni的博客 Modin是一个Python第三方库,可以通过并行来处理大数据集.它的语法和pandas非常相似,因其出色的性能,能弥补Pandas在处理大数据上的缺陷. ...

  9. 【效率】微软开源最强Python自动化神器!不用写一行代码!

    相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具.写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑. 虽然selenium有完备的文档,但也 ...

最新文章

  1. 大数据调度平台Airflow(三):Airflow单机搭建
  2. 86.git使用 建立和克隆远程仓库
  3. struts2文件上传(2)
  4. C# 实验三 判断一个字符、判断三角形、千名学生、a+aa+aaa+aaaa、求数列相加、约瑟夫环
  5. MIT正式发布编程语言Julia 1.0:Python、R、C++三合一
  6. Java HashSet的实现原理详解
  7. idea 启动界面导入项目_如何为您的项目启动有效的登录页面
  8. 面试基操:微服务拆分需要考虑什么因素?
  9. Python--map用法
  10. 修改项目生成Gemfile的模板
  11. mysql使用substring_index达到splite功能
  12. php dirname(_FILE_)
  13. siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的。
  14. Java 获取系统信息
  15. win10安装Visual Studio Code(VSCode)
  16. Kotlin — 实现JavaEE 开发Web工程
  17. cad2020 开始_中望cad2020发布,附简体中文免费版安装教程
  18. 逻辑结构的四种基本关系
  19. [DA45] 信用卡诈骗分析
  20. 爬取小说【含完整代码】

热门文章

  1. 转换为本地时间 java_UTC时间转换为本地时间(JAVA)
  2. X-editable文档
  3. atoi函数的介绍和模拟实现
  4. Docer镜像的导入导出
  5. unity获取脚本组件_Unity脚本组件
  6. npm丢失报错Error: Cannot find module ‘D:\node_modules\npm\bin\npm-cli.js‘
  7. spring 不同注解的使用场景
  8. linux强大的转发工具socat
  9. iOS_TUTK推送需要的相关资料
  10. html div居中属性,css布局设置div水平居中