茱莉亚分形

如果您喜欢这篇文章,可以在我自己的博客上阅读此文章。

如果我被迫下注,哪种编程语言将在未来5年内改变科学软件,我会把钱花在Julia身上 。

后超C ++和Rust的系统编程革命将带给系统工程,Julia将带给科学计算。

Julia是什么,为什么你要关心它?

尽管看上去与Python非常相似,但从最终用户的角度来看,Julia还是有一些技巧。

一旦Julia代码开始执行,它就是该程序的任何编写良好的C,C ++或Fortran实现的匹配项。

Julia使并行操作变得容易,并允许您编写漂亮且简洁的代码,并且运行速度很快。 您可以在其官方网站上了解更多有关Julia的快速便捷集成和部署的信息 。

Julia仍然是一种动态类型化的语言,这意味着可以键入值,但是没有变量。 但是,它为创建值时的值类型提供了一种非常简单的语法。 与Python不同,它的类型系统非常先进,这意味着您可以执行以下操作:

arr = Array{Float16,1}()push!(arr, 12.9) # Workspush!(arr, "my string") # Give a type errorval = UInt8(11)push!(arr, val) # `val` is cast to Float16 then appended

它还为诸如多维数组和使用SIMD优化的数组操作之类的内容提供本机支持。 此外,其数组是实际数组,而不是列表,而是连续分配的大块内存,用于快速迭代和查找。

所有这些,意味着Julia可以实现惊人的矢量计算速度,而无需第三方容器或线性代数库。

生成Julia集

由于这是一个低落的果实,我不妨通过生成和绘制一些Julia集来向您展示Julia 。

对于本博客的其余部分,我将尝试向您展示一些Julia代码,以展示其某些功能。 希望我会让您相信它的效率。

若要进行此操作,您将需要安装Julia并在您选择的文本编辑器中打开.jl文件。 您可以使用julia my_file.jl运行代码。

我喜欢Julia的一件事是,它消除了编写快速过程代码的大部分麻烦。 例如,这些函数会生成我们的Julia集矩阵。

function julia(x, y, width, height, c)
# Scale size the fractal within our frame
z = ((y/width)*2.7 - 1.3) + ((x/height)*4.5 - 2.5)im
for i = 1:255
z = z^2 + c
if abs(z) >= 4
return i
end
end
return -255
end

function julia_set(height, width, c)
[julia(x, y, width, height, c) for x = 1:height, y = 1:width]
end

我们可以使用给定的图像大小和c参数调用julia_set ,然后绘制所得矩阵的热图以查看分形。

绘制热图

关于Julia的另一个好处是,它由社区维护。 可以在Julia代码中混合使用C和Python库的简便且实际上不存在的开销,使我们能够使用许多不存在或不需要使用Julia替代方案的成熟库。

绘图功能非常强大,但它远未达到理想的记录库。 它提供了一个Juila接口,在该接口下,不同的后端(例如pyplot或plotyjs)将生成我们的图像。 我将使用GR后端。

# Install the packages we need
Pkg.add("Plots")
Pkg.add("GR")
# Import the Plots library in the current runtime
using Plots
# Initialize the gr backend
gr()

好了,现在剩下的唯一事情就是选择我们的c项,生成茱莉亚集合并绘制它。

# Set the size of our images
height = 800
width = 800
c = 1.2e^(1.1π*im)
# Generate the set
data = julia_set(height, width, c)
# Generate the heatmap and save it as a PNG
file_name = "/tmp/julia_$(height)_$(width)_$(c.re)_$(c.im)"
png(heatmap(data, size=(width,height), color=:ice), file_name)

这足以使我们产生相当大的分形,但是,我认为我们应该走得更远。

动画分形

我们可以使用Plots包做的另一件事是创建动画,只需通过ffmpeg将多个png背靠背放置即可。

这将使用@animate宏从我们的for循环中创建动画来完成。 然后, gif函数将其保存到文件中并提供所需的帧速率。

现在,根据您选择的c值,帧速率,配色方案和分辨率,您可以在此处获得截然不同的动画。 我创建了一个我很满意的游戏。

使其平行

生成图像并计算集合可能需要很长时间。 但是,Julia提供了可以轻松并行化循环而没有副作用的工具。 对于使用@parallel宏生成集合的循环,可以这样做。

这里要注意的一件事是,您需要使用-p参数运行Julia以从中受益。 例如julia -p 10 ,使用9个附加进程。

完成此操作后,需要使用@everywhere宏声明函数,以便可以从所有进程访问它们。

@everywhere julia = julia
@everywhere julia_set = julia_set

# Re-write our code to generate the sets in parallel
nr_frames = 40

sets = @sync @parallel append! for n=0:nr_frames
c = e ^ (2*π*n/nr_frames*im)
set = julia_set(height, width, c)
[set]
end

anim = @animate for set in sets
heatmap(set, size=(width,height), color=:speed, leg=false)
end

file_name = "/tmp/julia_$(height)_$(width)_$(nr_frames).gif"
gif(anim, file_name, fps=4)

并行化动画看似微不足道,但是由于@animate工作方式,它实际上要复杂一些。 我会将其作为练习留给读者。

我鼓励任何有兴趣尝试将这种语言用于他们的某些科学计算需求的人。

在很短的时间内,我开始偏向于使用Julia而不是Python,并且我相信我的一些读者可能会有同样的感觉

注意:如果您喜欢这篇文章,那么我会有一篇有关学习Julia的后续文章(该文章涉及*炒作*机器学习): 对抗性生成的Julia集

翻译自: https://hackernoon.com/julia-and-julia-sets-e5a6fa3de7a7

茱莉亚分形

茱莉亚分形_Julia和茱莉亚套装相关推荐

  1. 茱莉亚分形_茱莉亚的NaN Constant

    茱莉亚分形 Julia| NaN / Nan64常数 (Julia | NaN/Nan64 Constant) Nan / Nan64 is a constant of the Float64 typ ...

  2. 亚马逊运营知识:亚马逊排名规则是怎么样的

    亚马逊作为全球最大的电子商务平台,市场份额非常大,容易赚到钱.所以国内很多卖家都喜欢在亚马逊平台开店.电商平台,产品排名越高就越有优势,所以卖家都需要非常了解亚马逊排名规则.今天海熹跨境人才网就来给大 ...

  3. 亚马逊风控规则,亚马逊测评如何避免风控

    亚马逊风控规则,亚马逊测评如何避免风控 亚马逊风控是什么意思? 亚马逊风控就是亚马逊对买家账号进行的反作弊规则,具体的风控算法相信这个世界上只有亚马逊的技术部门的少部分人掌握,我们也无法得知,毕竟一但 ...

  4. 亚马逊运营:了解亚马逊平台基础运营知识点

    亚马逊平台是很倾向于买家的平台,注重购物体验,所以对于卖家的要求是非常严格的.对于很多运营基础知识点,新手卖家都容易忽视,操作不当导致产品下降有甚者还会被封号.下面海熹跨境人才网就给大家介绍亚马逊平台 ...

  5. 亚马逊运营知识:亚马逊产品的核心运营规律

    数据分析是亚马逊运营每天必要要做的事情,同时我们也需要掌握一些亚马逊运营的策略和规则,这样才能更好的调整运营.今天海熹跨境人才网整理了一些运营知识,来一起了解一下亚马逊产品的核心运营规则吧. 1.分工 ...

  6. 亚马逊运营知识:亚马逊全球开店需要准备和注意什么

    作为全球最大的垫子商务平台,亚马逊的流量池之大,吸引了很多商家入驻.那么亚马逊全球开店需要准备和注意什么呢?下面海熹跨境人才网跟大家聊聊相关知识,一起来了解一下吧. 作为亚马逊的新手,如果你从未从事过 ...

  7. 亚马逊培训知识:亚马逊运营的工作内容有哪些

    做过亚马逊的都知道,亚马逊运营是一个混合型的岗位.我们做亚马逊运营要知道,需要跟多个工种之间配合,是一个系统化的工作.今天海熹跨境人才网就来和大家聊一聊亚马逊运营的工作内容,一起来了解一下吧. 首先, ...

  8. c 语言程序设计(清华大学郑莉),C+语言程序设计(清华大学郑莉)十一ppt课件

    <C+语言程序设计(清华大学郑莉)十一ppt课件>由会员分享,可在线阅读,更多相关<C+语言程序设计(清华大学郑莉)十一ppt课件(26页珍藏版)>请在人人文库网上搜索. 1. ...

  9. c 语言程序设计第四版郑莉答案,C 语言程序设计郑莉(第4版)

    <C++语言程序设计(在线教学版?第4版)/清华大学计算机系列教材,普通高等教育"十一五"规划教材>针对程序设计的初学者,以面向对象的程序设计思想为主线,以通俗易懂的方 ...

最新文章

  1. SpringBoot学习之启动方式
  2. 【Android】Mac Android adb 配置
  3. android软件开发考试,Android软件工程师笔试题(全选择题)【0-1年经验】
  4. [Ynoi2018]末日时在做什么?有没有空?可以来拯救吗?
  5. android中服务播放音乐,为什么我们需要Android中的服务?音乐播放也可以通过后台线程完成...
  6. 12家无人驾驶公司新进展:驾照怕白考了!
  7. 宇通客车大型客车销量同比增长12.50%
  8. Office groove系统的术语
  9. 没搞懂bios设置这5个问题,千万别重装系统!
  10. LNode *和LinkList的小区分
  11. newifi虚拟服务器,简单几个步骤,newifi mini变身网络打印服务器,轻松省下100+-win7默认网关不可用...
  12. 台式计算机识别不了鼠标,USB无线鼠标失灵电脑检测不到无法识别怎么办
  13. 苹果刷机未知错误75_徐州苹果售后维修中心
  14. 笔记本电脑移动到行尾 行首 快捷键
  15. html+css自适应窗口+禅意花园
  16. 7个资源丰富到爆的搜索网站,没有你找不到的资源!
  17. Chatgpt如何使用在国内
  18. Window类似Alfred的搜索软件——Wox
  19. Java基础——匿名内部类
  20. CAS client 登录认证 报不允许使用CAS来认证您访问的目标应用。

热门文章

  1. android4.2卡刷包,谷歌 Nexus 4 Android4.2 官方ROM 基于JOP40C 稳定 卡刷优化包
  2. jquery 属性选择android,select设置text的值选中(兼容ios和Android)基于jquery
  3. MySQL-(联合查询)union all应用
  4. 自然那语言处理之深度学习word2vec笔记之应用篇
  5. 西安电子科技大学计算机科学与技术(电子信息专业)考研经验分享
  6. es如何解决timeout超时30秒问题
  7. Electro电子产品商店 WooCommerce 主题下载
  8. BZOJ 1109 [POI2007]堆积木Klo(树状数组)
  9. HTML5挂号,基于SSH的医院在线挂号
  10. wps开发笔记:wps端开发运行官方提供demo提示“请允许浏览器打开WPS Office”