朱莉娅是什么? 数值计算的新方法

Julia是一种用于数值计算的免费开源,高级,高性能,动态编程语言。 它具有动态语言的开发便利性和已编译的静态类型语言的性能,这部分要归功于基于LLVM的JIT编译器可以生成本机机器代码,部分要归功于通过专业化实现类型稳定性的设计dispatch ,可以轻松地将其编译为有效的代码。

在2012年宣布Julia首次发布博客文章中,该语言的作者Jeff BezansonStefan KarpinskiViral ShahAlan Edelman表示,他们花了三年时间创建了Julia,因为他们很贪婪 。 他们厌倦了Matlab,Lisp,Python,Ruby,Perl,Mathematica,R和C之间的权衡,并希望使用一种适用于科学计算,机器学习,数据挖掘,大规模线性代数的语言。 ,并行计算和分布式计算。

[InfoWorld的要点: 用于AI开发的5种最佳编程语言 为什么应该使用Python进行机器学习 朱莉娅与Python的对决:朱莉娅语言在数据科学方面的兴起5个基本的Python数据科学工具-现已得到改进数据科学的Python发行版Anaconda入门 Python的Anaconda发行版中的新增功能 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

朱莉娅是谁的? 除了对研究科学家和工程师具有吸引力之外,Julia对数据科学家,金融分析师和量化指标也具有吸引力。

该语言的设计者和另外两名语言设计师于2015年7月成立了Julia Computing ,以“开发使Julia易于使用,易于部署和易于扩展的产品。” 截至撰写本文时,该公司拥有28名员工,客户包括国家实验室,银行,经济学家和自动驾驶汽车研究人员。 除了在GitHub上维护Julia开源存储库外 ,Julia Computing还提供商业产品,包括JuliaPro (免费和付费版本)。

为什么是朱莉娅?

朱莉娅“旨在用单一语言创建前所未有的易用性,功能和效率的组合。” 关于效率问题,请考虑下图:

朱莉娅表现比较 朱莉娅计算

上图显示了Julia和其他10种语言相对于C的性能。 越低越好。 显示的基准是非常底层的任务。 该图是使用Jupyter笔记本中Gadfly绘图和数据可视化系统创建的 。 Julia右侧的语言按基准测试结果的几何平均值排序,其中LuaJIT最快,而GNU Octave最慢。

朱莉娅基准

我们在这里看到的是,对于某些类型的操作,Julia代码可以比C快,而对于其他一些操作,它的速度却不超过C几倍。 相比之下,R在某些操作中可能比C慢1000倍。

请注意,Julia最慢的测试之一是斐波那契递归。 这是因为Julia目前缺乏尾递归优化。 递归本质上比循环慢。 对于要在生产环境中运行的真正Julia程序,您将需要实现此类算法的循环(迭代)形式。

朱莉娅JIT编译

与纯解释器相反,JIT(即时)编译器方法要付出代价:编译器必须先解析源代码并生成机器代码,然后代码才能运行。 这可能意味着Julia函数在每个函数和宏第一次在会话中运行时就具有明显的启动时间。 因此,在下面的屏幕截图中,我们看到第二次生成一百万个随机浮点数,所花费的时间比第一次执行时少一个数量级。 @time宏和rand()函数都需要通过代码进行第一次编译,因为Julia库是用Julia编写的。

julia> @time rand(10^6);
  0.62081 seconds (14.44 k allocations: 8.415 MiB)

julia> @time rand(10^6);
  0.004881 seconds (7 allocations: 7.630 MiB)

茱莉亚(Julia)粉丝各种各样地声称,它易于使用Python,R甚至Matlab。 这些比较确实值得仔细研究,因为Julia语言优雅,强大并且面向科学计算,并且库提供了广泛的高级编程功能。

朱莉娅的例子

作为快速的Julia语言示例,请考虑以下Mandelbrot集基准代码

朱莉娅·曼德布罗集 IDG

曼德布洛特(Mandelbrot)在茱莉亚(Julia)中树立了标杆。

如您所见,语言中内置了复数算法,测试和计时宏也是如此。 您还可以看到,茱莉亚缺少困扰C语言的尾随分号和困扰Lisp语言的嵌套括号。 请注意,在第61和62行中,两次调用了mandelperf() 。第一个调用测试结果的正确性并进行JIT编译; 第二个电话获取时间。

朱莉娅编程

朱莉娅还有许多其他功能值得一提。 首先,用户定义的类型与内置的类型一样快速且紧凑。 实际上,您可以声明行为类似于泛型类型的抽象类型,只是它们针对传递的参数类型进行编译。

再者,Julia的内置代码矢量化意味着无需程序员对性能进行矢量化。 普通的去矢量化代码速度很快。 如果底层CPU上有SIMD指令和寄存器,则编译器可以利用它们,并在顺序过程中展开循环以在硬件允许的范围内对其进行向量化。 您可以使用@simd批注将循环标记为可矢量化。

朱莉娅平行性

Julia还使用两个原语设计用于并行性和分布式计算:远程引用和远程调用。 远程引用有两种形式: FutureRemoteChannelFuture相当于JavaScript的promise ; RemoteChannel是可重写的,可用于进程间通信,例如Unix pipe或Go channel 。 假设您已经用多个进程启动了Julia(例如,针对八核CPU(例如Intel Core i7)的julia -p 8 ),则可以@spawn@spawn remotecall()函数调用在另一个Julia进程上异步执行,然后再fetch()要同步并使用结果时返回的Future

如果不需要在多个内核上运行,则可以利用轻量级的“绿色”线程,在Julia中称为Task() ,在某些其他语言中称为协程Task()@taskChannel结合使用,该ChannelRemoteChannel的单进程版本。

朱莉娅类型系统

Julia具有一个引人注目的功能强大的类型系统,该系统默认情况下具有运行时类型推断的动态功能,但允许可选的类型注释。 这类似于TypeScript。 例如:

julia> (1+2)::AbstractFloat
ERROR: TypeError: typeassert: expected AbstractFloat, got Int64
julia> (1+2)::Int
3

在这里,我们第一次断言一个不兼容的类型,从而导致一个错误,而第二次断言一个兼容的类型。

朱莉娅弦

Julia具有对以UTF-8格式存储的Unicode字符串和字符的有效支持,以及对ASCII字符的有效支持,因为在UTF-8中,小于0x80(128)的代码点被编码为单个字符。 否则,UTF-8是可变长度编码,因此您不能假定Julia字符串的长度等于最后一个字符索引。

全面支持UTF-8意味着,除其他外,您可以轻松地使用希腊字母定义变量,这可以使科学的Julia代码看起来非常像公式的教科书解释,例如sin(2π) 。 提供了transcode()函数来将UTF-8与其他Unicode编码进行相互转换。

C和Fortran函数

尽管您确实需要了解Fortran编译器发出的“修饰”函数名称,但是Julia可以直接调用C和Fortran函数,而无需包装或特殊API。 外部C或Fortran函数必须位于共享库中。 您可以使用Julia ccall()函数进行实际的ccall() 。 例如,在类似Unix的系统上,可以使用以下Julia代码通过libc中的getenv函数获取环境变量的值:

function getenv(var::AbstractString)
     val = ccall((:getenv, "libc"),
                 Cstring, (Cstring,), var)
     if val == C_NULL
         error("getenv: undefined variable: ", var)
     end
     unsafe_string(val)
end

julia> getenv("SHELL")
"/bin/bash"

朱莉娅宏

Julia具有类似于Lisp的宏,与C和C ++使用的宏预处理器不同。 Julia还具有其他元编程功能,例如反射,代码生成,符号(例如:foo )和表达式(例如:(a+b*c+1) )对象, eval()和生成的函数。 Julia宏在解析时进行评估。

另一方面,当已知函数的参数类型时,将在函数编译之前对其进行扩展。 通过消除对运行时分派以支持参数多态性的需求,生成的函数具有通用函数(在C ++和Java中实现)的灵活性以及强类型函数的效率。

GPU支持

茱莉亚(Julia)使用MXNet深度学习软件包, ArrayFire GPU阵列库 ,cuBLAS和cuDNN线性代数以及深度神经网络库以及用于通用GPU计算的CUDA框架提供GPU支持。 下图显示了Julia包装器及其各自的库。

朱莉娅GPU包 朱莉娅计算

您可以使用许多Julia软件包来对不同抽象级别的GPU进行编程。

JuliaPro和Juno IDE

您可以从Julia语言站点下载适用于Windows,MacOS,通用Linux或通用FreeBSD的免费开源Julia命令行。 您可以从GitHub克隆Julia源代码存储库。

或者,您可以从Julia Computing 下载JuliaPro 。 除了编译器之外,JuliaPro还为您提供了基于Atom的Juno IDE(如下所示)和160多种精选软件包,包括可视化和绘图。

除了免费的JuliaPro之外,您还可以添加企业支持,定量财务功能,数据库支持和时间序列分析的订阅。 JuliaRun是用于集群或云的可伸缩服务器。

朱莉娅·朱诺·伊德 IDG

Juno是基于Atom文本编辑器的免费Julia集成开发环境。

Jupyter笔记本和IJulia

除了将Juno用作Julia IDE外,您还可以将Visual Studio Code与Julia扩展一起使用(直接显示在下面),以及将Jupyter笔记本与IJulia内核一起使用(显示在下面的第二张和第三张屏幕截图中)。 您可能需要为Python 2或(最好)与Anaconda或pip的Python 3安装Jupyter笔记本。

朱莉娅视觉工作室代码 IDG

具有Julia扩展名的Visual Studio代码。

朱莉娅jupyter笔记本 IDG

从Jupyter笔记本启动Julia内核。

朱莉娅朱庇特正弦图 IDG

在Jupyter笔记本中使用Julia绘制正弦波。

朱莉娅·博克斯(JuliaBox)

您可以使用Julia Computing的另一种产品JuliaBox (如下所示)在Jupyter笔记本中在线运行Julia,而无需在本地计算机上进行任何安装。 JuliaBox当前包含300多个软件包,运行Julia 0.6.2,并包含数十个Jupyter教程笔记本。 教程文件夹的顶级列表如下所示。 JuliaBox访问的免费级别使您可以使用三个CPU内核进行90分钟的会话; 每月14美元的个人订阅可为您提供五个核心的四个小时的课程; 每月70美元的专业版订阅可为您提供32个核心的八小时会话。 截至2018年6月,尚未提供GPU访问权限。

julia juliabox教程 IDG

JuliaBox在线运行Jupyter笔记本中的Julia。

朱莉娅套餐

朱莉娅“走路像Python,但跑起来像C。” 正如我的同事Serdar Yegulalp 在2017年12月所写的那样 ,Julia开始向Python挑战数据科学编程,这两种语言都有优势。 为了说明Julia对数据科学的支持日趋成熟,请考虑已经有两本书《 朱莉娅·数据科学》 ,一本由Zacharias Voulgaris 撰写 ,另一本由Anshul Joshi撰写 ,尽管我不能说两本的质量一。

如果查看下面显示的来自Julia Observer的总体上评分最高的Julia软件包 ,您将看到Jupyter笔记本的Julia内核,Gadfly图形软件包(类似于R中的ggplot2 ),通用绘图界面,若干深度学习和机器学习包,微分方程求解器,DataFrames,纽约联储动态随机一般均衡(DSGE)模型,优化建模语言以及与Python和C ++的接口。 如果您在此常规列表中走得更远,还可以找到QuantEcon,PyPlot,ScikitLearn,生物信息学软件包以及用于函数式编程的惰性列表的实现。

朱莉娅顶级套餐 IDG

朱莉娅的顶级套餐。

如果Julia软件包不能满足您的需求,并且Python接口不能满足您的需求,那么您还可以安装一个软件包,为您提供R(RCall)和Matlab的通用接口。

朱莉娅(Julia)用于金融分析师和量化

Quants和财务分析师将找到许多免费软件包,以加快工作速度,如下面的屏幕快照所示。 此外,Julia Computing还提供了JuliaFin套件,其中包括Miletus (用于金融合同的DSL), JuliaDB (高性能的内存和分布式数据库), JuliaInXL (从Excel工作表中调用Julia)和Bloomberg连接(访问真实时间和历史市场数据)。

朱莉娅顶级金融配套 IDG

朱莉娅的顶级理财套餐。

From: https://www.infoworld.com/article/3284380/what-is-julia-a-fresh-approach-to-numerical-computing.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值