语言▍如果你喜欢Python,那你迟早会喜欢上julia的

语言▍如果你喜欢Python,那你迟早会喜欢上julia的
www.zeeklog.com  - 语言▍如果你喜欢Python,那你迟早会喜欢上julia的


作者|fandyst   编辑|彩虹堂
36大数据推荐

为什么要选择 Julia?因为它比其他脚本语言更快,它在具备 Python、MATLAB、R 语言开发速度的同时,又能生成与 C 语言和 Fortran 一样快的代码。


可曾想过有那么一门语言:


这门语言能够有C语言一样的速度,Ruby一样得活力(dynamism)。像homoiconic一样的语言,它像Lisp一样有宏,但是也像Matlab一样有显而易见、熟悉的数学标记。


像Python一样适用,像R语言一样适用于统计,像Perl一样适用于字符串处理,像线性代数Matlab一样强大,像shell一样擅长粘合程序。 它还具有互动性且能够被编译。


她的名字叫: Julia


Julia是一个新的高性能动态高级编程语言。语法和其他编程语言类似,易于其他语言用户学习。Julia拥有丰富的函数库,提供了数字精度、精致的增幅器(sophisticated amplifier)和分布式并行运行方式。核心函数库等大多数库是由Julia编写,但也用成熟的C和FORTRAN库来处理线性代数、随机数产生和字符串处理等问题。Julia语言可定义函数并且根据用户自定义的参数类型组合再进行重载。


JIT高性能编译器


Julia使用的JIT(Just-in-Time)实时编译器很有效地提高了它的运行效率,在某些地方甚至能比得上C和C++。


下面通过标准测试程序来测试下它的效率,你可以自己比较下各语言的运行效率。

www.zeeklog.com  - 语言▍如果你喜欢Python,那你迟早会喜欢上julia的

注:运行环境是MacBook Pro,2.53GHz,Intel Core2 Duo CPU和8G 1066MHz,DDR3内存。


上表中只有C++运行时间是绝对时间,其它都是相对于C++的相对时间,数值越小代表用时越少。除少数几项测试Julia惜败于Matlab和JavaScript外,Julia完胜其他高级语言,甚至在pi summation上,成功以25%的优势击败C++。通过使用Intel核心数学库(MKL),MatLabs在矩阵乘法运算中稍占便宜,但是拥有MKL授权的Julia同样可以使用Intel MKL库,不过默认的开源BLAS库性能也不错。


这个测试表是通过编译器性能对一系列常用代码模式进行分析而得出的。比如:字符串解析、函数调用/回调、排序和数值循环、生成随机数和数组运算等。


Julia克服了高级语言一直难以逾越的难关:标量算数循环(在pi summation上就能体现出来。)。Matlab的浮点运算JIT和 V8 JS引擎对此也处理得很好。但JS不支持LAPACK等线性代数库导致了在矩阵运算中的低性能,而Julia有比较多的方法消除负载(overhead),使得它可以轻松支持任何函数库。


矩阵统计的Julia代码虽然性能上比不上C++但却要简洁得多。然而,规范和编制太过随意可能会在将来成为一个问题。


特点characteristic


  • 快速:Julia一开始就是为高性能而设计的。Julia可以通过LLVM而跨平台被编译成高效的本地代码。
  • 通用:Julia使用多分派作为编程范式,使其更容易表达面向对象和函数式编程范式。标准库提供了异步I/O,进程控制,日志记录,性能分析,包管理器等等。
  • 动态:Julia是动态类型的,与脚本语言类似,并且对交互式使用具有很好的支持。
  • 数值计算:Julia擅长于数值计算,它的语法适用于数学计算,支持多种数值类型,并且支持并行计算。Julia的多分派自然适合于定义数值和类数组的数据类型。
  • 可选的类型标注:Julia拥有丰富的数据类型描述,类型声明可以使得程序更加可读和健壮。
  • 可组合:Julia的包可以很自然的组合运行。单位数量的矩阵或数据表一列中的货币和颜色可以一起组合使用并且拥有良好的性能。


用途purpose


构建,部署或嵌入您的代码


Julia允许您编写UI,静态编译代码,甚至将其部署在Web服务器上。它还具有强大的类似shell的功能,可用于管理其他进程。它提供类似Lisp的宏和其他元编程工具。


Julia具有C / Fortran, C ++, Python, R, Java和许多其他语言的外部函数接口 。Julia也可以通过嵌入API嵌入到其他程序中。具体来说,Python程序可以使用PyJulia调用Julia 。R程序可以用R的JuliaCall做同样的事情,这可以通过从R调用MixedModels.jl来证明。


数据科学  与您的数据互动


Julia数据生态系统允许您快速加载多维数据集,并行执行聚合,连接和预处理操作,并以高效格式将它们保存到磁盘。您还可以使用OnlineStats.jl对流数据执行在线计算 。无论您是在寻找方便和熟悉的 DataFrame,还是使用JuliaDB的新方法 ,Julia 都能为您提供丰富的工具。该 Queryverse包装作用的元数据包,通过它可以访问这些工具与朱利安的API。除了使用表格数据外,还有JuliaGraphs 软件包可以轻松使用组合数据。


Julia可以使用JDBC.jl和 ODBC.jl驱动程序处理几乎所有数据库 。此外,它还使用Spark.jl, HDFS.jl和 Hive.jl与Hadoop生态系统集成 。


机器学习  可扩展的机器学习


Julia为深度学习(Flux.jl和 Knet.jl), 机器学习和AI 提供了强大的工具。Julia的数学语法使其成为表达算法的理想方式,就像它们在论文中编写一样,构建具有自动差异的可训练模型 , GPU加速以及对数TB数据的支持。


Julia丰富的机器学习和统计生态系统包括 广义线性模型, 决策树和聚类的功能。您还可以找到贝叶斯网络和 马尔可夫链蒙特卡罗的包 。


科学领域   丰富的科学计算生态系统


Julia的设计从根本上讲非常擅长数值和科学计算。这可以从Julia编写的大量科学工具中看出,例如最先进的微分方程生态系统 (DifferntialEquations.jl),优化工具(JuMP.jl和 Optim.jl),迭代线性求解器 (IterativeSolvers) .jl)以及更多,可以驱动所有模拟。


Julia还提供了许多特定领域的生态系统,如生物学 (BioJulia),运筹学(JuliaOpt),量子物理学 (QuantumOptics),非线性动力学(JuliaDynamics),定量经济学 (QuantEcon),天文学 (JuliaAstro)和生态学 ( EcoJulia)。有了一群来自科学界各个部分的热情的开发人员和维护者,这个生态系统将继续变得越来越大。


并行计算   并行和异构计算


Julia专为并行性而设计,并为各个级别的并行计算提供内置基元: 指令级并行, 多线程和 分布式计算。该Celeste.jl项目达到1.5千万亿次/秒的在NERSC超级计算机的Cori使用650000个内核。


Julia编译器还可以为各种硬件加速器生成本机代码,例如GPU和Xeon Phis。诸如DistributedArrays.jl和Dagger.jl之类的包为并行性提供了更高级别的抽象。


不得不说这语言的野心的确很大,其在github已经有15千多Star,已被下载超过200万次,而Julia社区已经开发了超过1,900个Julia软件包。其社区好像也挺完善的,中文社区为juliacn.com。



我们将在明天的文章中继续为大家介绍Julia,敬请期待。


36大数据社群(大数据交流、AI技术学习群、机器人研究、AI+行业、企业合作群)火热招募中,对大数据和AI感兴趣的小伙伴们。增加AI小秘书微信号:a769996688,说明身份即可加入。

www.zeeklog.com  - 语言▍如果你喜欢Python,那你迟早会喜欢上julia的

欢迎投稿,投稿/合作:[email protected]

如果您觉得文章不错,那就分享到朋友圈~