微信号:djangoSpace

介绍:开发者平台

为什么要学习julia这门语言?

2016-03-07 23:12 罗秀哲

作者:罗秀哲
链接:http://www.zhihu.com/question/36249799/answer/69521797
来源:知乎

我这里列出了科学研究中的一些可能存在的需求(很有可能不全,所以还请指正)

  • 矩阵计算

  • 代码的并行化

  • 对一些成熟科学库的支持

  • 高性能

  • 代码的重用性(对一些编程范式的支持,如面向对象,函数式编程)

那么Julia能做到吗?回答当然是可以的。

首先Julia是一款很好上手的语言,你会发现Julia中能够找到很多很多其它语言的痕迹,从它的开发目的上看,这也是必然的,因为它有一个目标,就是改善现在为了满足不同需求使用不同语言的情况。

从豆瓣上摘了一下中文版的 为什么要开发Julia:

简单的说,因为我们很贪心。

我们是Matlab的重度用户。我们中间有Lisp高手,Python专家,Ruby专家,还有Perl高手。有些家伙从嘴上无毛的年纪就开始用 Mathematica了,当然我们中间也有人现在也还是不长胡子的。我们比正常人画了更多的R图。C更加是我们最喜欢的大杀器。

我们热爱所有这些语言,他们实在是很好很强大。在我们从事的领域中——包括科学计算、机器学习、数据挖掘、大规模线性代数、分布式与并行计算这些——每种语言都对某些问题来说很完美,但对另一些就变得很糟糕。我们需要做出取舍。


我们很贪心:我们想要更多。

我们需要一种语言,它是开源的,有自由的许可。我们需要C语言的速度,又要有Ruby社区的活力。我们需要一种homoiconic风格的编程语 言,像Lisp那样有真正的宏,又要有Matlab里那些熟悉的数学概念。我们需要的东西既能像Python那样可以作为通用编程语言使用的工具,又要能 够像R那样适用于统计分析,能像Perl那样自然地处理字符串,能像Matlab那样给力地处理矩阵运算,还要能像shell一样能把各种程序粘合在一 起。它必须让初学者觉得简单易学,同时又可以让高级用户们挥洒自如。它既要是交互式的,又能被编译执行。


(前面提到过的,它要有C那么快!)

我们在构思这些需求的时候,我们还发现它得有Hadoop这样强大的分布式能力——却不想要Hadoop里面那些冗繁的Java和XML,不想在几 百台机器庞大的日志文件里去寻找那些bug。我们不想要那些令人费解的层次结构。我们想让简单的标量循环能在单个CPU的寄存器里编译出精致的机器代码。 我们想要写一个A*B就能让上千台机器为我们完成一次规模庞大的矩阵乘法。


我们不需要的时候,就不用做类型申明。但我们需要多态函数(polymorphic functions)时,希望能通过泛型编程(generic programming )使得只写一次的算法能在无穷多的数据类型上套用。我们希望通过多重分派(multiple dispatch ),能够为一个函数所有可能的参数选出最有效的执行方法。这些参数可能有着不同的定义,来自不同的数据类型,却能提供相同的功能。在拥有这些能力得的同 时,我们还希望这种语言简单、干净!


要求有点多,是不是?

尽管我们意识到了自己有多贪心,我们还是想把这些都统统拥入怀中。大概在两年半之前,我们开始创造这种能满足我们贪念的语言。它还没有完工——但是 已经可以发布一个1.0版本了——我们创造的语言叫做Julia。她已经实现了我们那些乱七八糟需求的90%,而现在她需要来自更多人更乱七八糟的需求, 来让她走得更远。如果你也是一位贪心不足,不可理喻,需索无度的码场二逼青年,希望你能来试试这个东东。




1.矩阵计算
Julia的矩阵计算默认是由openBLAS支持。openBLAS是一款开源的线性代数库,开发者来自于中科院软件所的张常有老师团队。同时Julia也支持intel的MKL库(如果你购买了intel的MKL的话)。所以正如Julia自己所号称的一样,Julia的矩阵处理性能是非常高的。

2.并行
然后是代码的并行化,Julia的介绍中有这么一句话:为分布式与并行而设计.可以看一下语法上也是原生支持并行的.

3.库的支持
然后目前Julia已经有一些很好的库了(以后不断更新):

  • 数学优化方面有JuliaOpt,并没学过数学优化但是据说写的很好用。

  • JuliaQuant量化库,貌似楼下的答主在用

  • 天文方面,JuliaAstro一个天文口的库

  • 在量子计算方面,由齐晓东@i2000s 发起的juliaQuantum已经能够具有一些基本的功能,同时他们甚至有拿代码去量子计算机上使用(当然并不是真的量子计算机,而是绝热机)

  • Mocha 一个很像caffee的机器学习库

  • JuliaGPU里面有一些关于GPU计算的库,一些著名的库的wrapper,比如opencv(还只能在0.5-dev上调用,因为是调用了cpp)

  • JuliaBio 生物信息(并没有用过和我的专业不太相关)


4.编程范式的支持
OO是支持的,采用的是多重派发.函数式编程,lambda表达式,闭包等也是有的.然后也有metaprogramming.

由于Julia语言的诞生源自于两个实验室中,所以Julia首先是会要满足实验室科研的需求的(小道消息说,Julia的诞生是因为某计算化学大牛觉得MATLAB不好用,2333)同时它强大的目标,我想在1.0之后也能够引起一大部分业界关注者的使用(然而一些生物信息的创业公司已经在用了呢,1月也许会举办一次深圳的meet up哦!)。

同时相比MATLAB,mathematica,使用MIT协议的Julia,能够为开发省去很多潜在的麻烦。也能够更好的帮助学术上的交流,先写到这里。


 
djangoSpace 更多文章 [原]django构建简易博客系统 [原]python画词云图(电商评论数数据) BP神经网络算法之matlab具体实现 梯度下降法求解线性回归之matlab实现 梯度下降法求解线性回归之python实现
猜您喜欢 看起来很不可思议的数学知识 RHEV--基于开源的企业级虚拟化解决方案 与机器赛跑?麻省理工学院学者预测很多工作前景惨淡 Python中的变量绑定[1] Exin的DevOps Master 白皮书您读了么?