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

article/2025/9/14 20:53:25

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

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

Mandelbrot集合的定义如下:
z n + 1 = z n 2 + c z_{n+1}=z^2_n+c zn+1=zn2+c
其中,c是一个复数。加入给定一个复数 z 0 z_0 z0,比如 z 0 z_0 z0=0,那么这个递推式会生成一个序列: [ z 0 , z 1 , z 2 , z 3 , z 4 . . . ] [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())

在这里插入图片描述


http://chatgpt.dhexx.cn/article/8pMfjB0h.shtml

相关文章

曼德勃罗集(Mandelbrot Set)

先来膜拜一下大神&#xff01; 曼德勃罗(Benoit B. Mandelbrot)&#xff0c;数学家、经济学家&#xff0c;分形理论的创始人。1924年生于波兰华沙&#xff1b;1936年随全家移居法国巴黎&#xff0c;在那里经历了动荡的二战时期&#xff1b;1948年在帕萨迪纳获得航空硕士学位&am…

用matlab画Mandelbrot(曼德布罗特)图

Mandelbrot图实际上是由Mandelbrot集合构成的图像。 Mandelbrot集合的定义如下&#xff1a; zn1z2nc 其中&#xff0c;c是一个复数。加入给定一个复数 z0 &#xff0c;比如 z00 &#xff0c;那么这个递推式会生成一个序列&#xff1a; [z0,z1,z2,z3,...] 。如果这个序列收敛…

Mandelbrot 并行实现

最近要交并行计算的作业了,这周终于把作业写了个大概,这期间感觉学了不少东西,总结一下。 Mandelbrot Set 背景 前几天逛维基百科的时候看到了如下的消息:著名数学家、分形之父Benot B. Mandelbrot(中文名本华曼德博)美国时间10月15日辞世,享年85岁。 “1979年,在哈…

Mastering Qt 5 学习笔记-Mandelbrot

是一个 Mandelbrot 分形的多线程计算。 用户将看到分形&#xff0c;并能够在该窗口中平移和缩放。Mandelbrot 分形是一个处理复数 (a bi) 的数值集&#xff0c;该图像中的每个黑色像素都趋向于发散到一个无限值&#xff0c;&#xff0c;而绿色像素则有界于一个有限值。绿色像素…

Mandelbrot集合及其渲染

什么是Mandelbrot集合&#xff1f; Mandelbrot集合是在复数平面上组成分形的点的集合&#xff0c;它正是以数学家Mandelbrot命名。 Mandelbrot集合可以用复二次多项式\[ f_c(z)z^2c \] 来定义 其中c是一个复数。对于每一个c&#xff0c;从\(z 0\),开始对\(f_c(z)\)进行迭代。 …

分形之父 Mandelbrot

著名数学家&#xff0c;被誉为分形之父的Mandelbrot先生&#xff0c;美国时间10月15日在马萨诸塞州剑桥辞世&#xff0c;享年85岁。他用“美丽”改变了我们的世界观&#xff0c;他被认为是20世纪后半叶少有的影响深远而且广泛的科学伟人之一&#xff0c;1993年他获得沃尔夫物理…

Ettercap系列 II:基于命令行界面(结合driftnet截获目标机器正在浏览的图片)

相信跟着这个系列走&#xff0c;一直看到这篇文章的读者已经了解了基于图形化Ettercap的操作&#xff0c;并对Arp欺骗和Ettercap相关的术语有所了解。本篇就如何在命令行界面下操作ettercap&#xff0c;以实现与图形化界面相同的效果展开讨论。可能你会不解&#xff1a;既然我已…

无线局域网的嗅探攻击和防御——ettercap+driftnet

&#xfeff;&#xfeff; 无线局域网的嗅探攻击和防御 -----ettercapdriftnet 1 实验要求和目的 ●了解局域网转发数据的规则与协议 ●了解抓包软件的原理与操作流程 ●对网络中数据传输的协议有更深层次的认识 2 实验原理和背景知识 2.1 抓包软件与分析软件 本次嗅探试验所…

python实现图片嗅探工具——自编driftnet

python实现图片嗅探工具——自编driftnet 前言一、数据包嗅探二、图片捕获三、图片显示及主函数写在最后 前言 想必尝试过中间人攻击&#xff08;MITM)的小伙伴&#xff0c;大概率是知道driftnet的。这是一款简单使用的图片捕获工具&#xff0c;可以很方便的从网络数据包中抓取…

kali中 arpspoof、driftnet、流量转发的图片抓取

1、开启内核转发模式&#xff08;echo 1为转发 echo 0为拦截&#xff09; echo 1 /proc/sys/net/ipv4/ip_forward 配置完成使用命令查看cat /proc/sys/net/ipv4/ip_forward 2、使用 Arpspoof 开始攻击 命令:Arpspoof -i (自己网卡) -t 目标IP 网关 3、打开另一个终端 查看dri…

ARP欺骗攻击(流量图片)——dsniff与driftnet使用

ARP欺骗攻击&#xff08;流量&图片&#xff09; 原理&#xff1a; 首先我们![请添加图片描述](https://img-blog.csdnimg.cn/7de7923387224bcda1ea4be958032ae9.png 要明白何为ARP&#xff08;地址解析协议&#xff09;&#xff1a;是根据 IP地址 获取 物理地址 的一个 TC…

NO.26——利用ettercap和driftnet截获数据流里的图片

原理 Ettercap最初设计为交换网上的sniffer&#xff0c;但是随着发展&#xff0c;它获得了越来越多的功能&#xff0c;成为一款有效的、灵活的中介攻击工具。它支持主动及被动的协议解析并包含了许多网络和主机特性&#xff08;如OS指纹等&#xff09;分析。 Ettercap…

linux嗅探器抓包,Kali Linux 嗅探/欺骗工具 driftnet 教程

日期:2018年01月11日 观看: 13,491 C 次 Driftnet是一个监听网络流量并从它观察到的TCP流中提取图像的程序。有趣的是看到很多网络流量的主机上运行。在实验性增强中,driftnet现在从网络流量中挑选出MPEG音频流,并尝试播放它们。 Driftnet是一款从网络流量捕获图像并将其显…

ARP中使用driftnet工具捕获图片

在进行任何网络攻防实验时&#xff0c;请务必遵守当地法律法规以及道德准则&#xff0c;必须遵守法律规定&#xff0c;只能在合法授权的情况下进行实验和演练。 预备知识 基本网络概念&#xff1a;了解TCP/IP协议、IP地址、MAC地址等基本网络概念。 ARP协议&#xff1a;了解A…

使用Arp欺骗与driftnet工具监听局域网信息

【重点声明】此系列仅用于工作和学习&#xff0c;禁止用于非法攻击&#xff0c;非法传播。一切遵守《网络安全法》 环境&#xff1a; Ubuntu 16.0.4攻击主机&#xff1a;192.168.1.130&#xff0c;Windows10 目标机&#xff1a;192.168.1.219 扫描该网段存活的主机&#xff1…

(arpspoof + driftnet)实现arp欺骗

(arpspoof driftnet)实现arp欺骗 虚拟机环境&#xff1a;kali linux window 7 文章目录 (arpspoof driftnet)实现arp欺骗前言一、安装arpspoof和driftnet二、Attack1.信息收集2.MAC欺骗与流量截图 总结 前言 ARP欺骗&#xff1a;欺骗局域网内主机的网关MAC地址&#xff0c…

自举电路介绍

自举电路也叫升压电路&#xff0c;利用自举升压二极管,自举升压电容等电子元件&#xff0c;使电容放电电压和电源电压叠加&#xff0c;从而使电压升高&#xff0e;有的电路升高的电压能达到数倍电源电压。 升压电路原理 举个简单的例子&#xff1a;有一个12V的电路&#xff0c…

秒懂电容自举电路

自举电容的核心原理是&#xff1a;电容两端电压不能突变。 从这句话中&#xff0c;我们可以获取到两个关键字&#xff1a;两端电压、不能突变。 两端电压指的是电容一边相对另一边的电压&#xff0c;我们知道电压本身就是个参考值&#xff08;一般认定参考GND&#xff0c;认定…

STM32自举程序

空间分布 将flash空间分为自举程序区和应用程序区。 应用程序区存放用户应用程序。 自举程序负责获取用户应用程序数据&#xff0c;并写入应用程序区&#xff0c;实现程序升级。 程序跳转 自举程序需要可以跳转到应用程序区&#xff0c;当然应用程序也可以根据需要设计成可…

自举电路(升压电路)

the boost converter,或者叫step-up converter&#xff0c;是一种开关直流升压电路&#xff0c;它可以是输出电压比输入电压高。基本电路图见图1.假定那个开关(三极管或者mos管)已经断开了很长时间&#xff0c;所有的元件都处于理想状态&#xff0c;电容电压等于输入电压。下面…