初识Julia

作者: BL_Fang | 来源:发表于2020-01-01 20:58 被阅读0次

    Hello!最近Julia这个语言突然火了起来了。我第一次看到这个语言的名字的时候还是几个月前吧,当时的印象就是有人嘲笑这个语言怎么起了这么个名字,还说人家没火起来是名字起得差。我哈哈一笑,可是发现这个名字只要见过一遍后,再也忘不了了。前两天更是看了一篇报道,说这个语言要火。于是,我现在要学这个语言。
    回想一下已经自学了多门编程语言,PHP,MATLAB,Python,学一段时间后总是手痒着想写一些教程教大家——好为人师吧。可是那些教程一直没火起来,大概是质量不行吧。我想原因可能是那些教程都是学会以后写的,细节太少。学的时候很认真,各种细节都会注意到,但是学会了一切都认为是自然而然,不需多讲。一个不需多讲,弄得大家一头雾水。所以,我打算边学Julia边写教程。把自己在这个过程中遇到的所有问题都一一记录下来。希望能取得好效果吧。
    今天我们来初识Julia。怎么办呢?当然是去百度一下了。

    Julia 是一个面向科学计算的高性能动态高级程序设计语言。其语法与其他科学计算语言相似。在许多情况下拥有能与编译型语言相媲美的性能。——百度百科

    OK,原来Julia是一门专门为了科学计算,特别是提升速度的语言。所以如果你是一个做数值模拟的科研人员,那么OK,这门语言会帮到你大忙。像目前很火的深度学习,计算量也很大,那Julia应该也很合适。但是如果你只是要画个图,拟合一条曲线,那计算量不大,不如使用MATLAB或Python。
    大家再看,“动态高级语言”。那肯定还有静态低级语言。什么是动态高级?或者什么是静态低级?比如MATLAB,它是边解释,边执行,而C是全部编译好后执行。MATLAB是动态的。C是静态的。所以,什么是动态,什么是静态?至于低不低级,这是一个相对的概念。C相对MATLAB来讲不高级,但是相对汇编,那必然很高级了。其实这里的高级低级不代表品质,只是表明哪个语言更接近人类,高级被封装的更多吧。
    Julia有科学计算语言的语法是什么意思呢?就是好上手呗。好消息啊。往下看,有一段示例

    #生成Mandelbrot集合
    function mandel(z)
        c = z
        maxiter = 80
        for n = 1:maxiter
            if abs(z) > 2
                return n-1
            end
            z = z^2 + c
        end
        return maxiter
    end
    

    首先忽略这段代码到底干啥,看语法感觉这个很像MATLAB啊。不知道学完这个会不会和MATLAB混了。
    现在,算是对Julia有一个基本的认识了。学游泳最好的方法是什么?就是去游泳。——当然如果真是游泳的话,大家注意安全。我们下载一个Julia玩玩。官网https://julialang.org/

    image.png
    Julia的官网就有它的特点介绍。我们大概可以浏览一下。我觉得比较重要的几点是快、动态、易用、开源。开源其实很关键的,特别是对于我们想成为高手而言,多读它的源代码对理解它,使用它很有帮助。
    好了,别忘了我们的任务,下载Julia。在往上一点点有一个下载按钮(就不粘贴出来了),点击后跳转到了下载页面,如下,大家根据自己的电脑选择合适的版本
    image.png
    我使用迅雷下载,否则用浏览器自带的功能下载会非常慢。下载完成后,双击安装。安装过程没有什么好讲的,一路默认即可。最后在启动菜单栏得到
    image.png
    两个按钮,一个启动Julia,一个删除。嗯,确实比较简洁。点开看看,第一个啊,可千万别点成第二个了。
    image.png
    什么?这好像就是一个交互窗口啊。代码编辑器呢?调试功能有吗?好吧,输几个式子试试
    image.png
    能算1+1等于几,大概地球人都会吧。语法和MATLAB比较一致,指数是用'^'表示的,而不是'**'。Python中用两个星星。
    但是没有集成开发环境(IDE),我很不开心。不可能只是拿它当成一个计算器使用吧。一定有的,只是没有找到罢了。
    首先看看文档吧。就在我们刚才下载那个页面上边的菜单里
    image.png

    Julia provides ease and expressiveness for high-level numerical computing, in the same way as languages such as R, MATLAB, and Python, but also supports general programming. To achieve this, Julia builds upon the lineage of mathematical programming languages, but also borrows much from popular dynamic languages, including Lisp, Perl, Python, Lua, and Ruby.

    这段话的意思是Julia是一个多种语言的集合体,要集合当然是集合众家所长了。好消息啊。特别是如果大家对其它这些语言有所了解的话,那学这个肯定会省不少事。又好用,速度又快,那肯定是有一些门道。到底这个语言怎么办到的呢?我想先把这个留作一个问题,将来再解决吧。
    继续看Getting started.https://docs.julialang.org/en/v1/manual/getting-started/
    在这节里边讲了我们刚才将其作为计算器的实验,特别讲了如何执行一个Julia代码文件,但是没有讲我们想要的IDE。官方难道没有提供IDE吗??
    接着再浏览一下文档的目录,此处省略一万个字,我们将来再讲这些细一点的知识。总之没有讲IDE的事情。
    好吧,我放弃了,估计是官方没有提供,我们百度一下第三方的吧。知乎上有一个网友这样说

    作者:罗秀哲
    链接:https://www.zhihu.com/question/25517464/answer/85755639
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    sublime text 2/3
    其实都不能算IDE,都没有像pycharm那种debug等等的功能在Unix系的系统上很好用(OS X/Ubuntu/Debian…),安几个插件就OK了IJulia 可以提供编译器的配置,支持shift+enter执行一行等功能(虽然没使用过)juliacompletions 这个是用来提供utf-8字符补全的,这样就可以用一些奇怪的字符命名你奇怪的函数了233,不过需要提醒一点的是,需要打开julia-ustf.sublime-completions,然后删掉keyword.operator.arithmetic.julia,不然不能正常使用(会出现只在最后一行补全的bug)
    Juno
    Juno是官方出的IDE,刚开始用的时候用的这个,挺漂亮的,然后单行执行什么的也很方便,还可以把输出直接显示在代码行的下面或者旁边.对于图片输出还可以动态地调参数(这一点很赞啊,就不需要像mma里一样再写个manipulate了)不过缺点就是感觉在我的渣电脑上用起来比sublime卡.有时候会报些不知道是什么鬼的错误(可能还是因为我对Juno不熟悉)
    jupyter
    这个不能更赞,用这个写py的人就很多了,可以穿插写markdown文档,而且基于web的话还可以做在线编辑器用.同样也能以cell的方式执行代码(像mma一样),个人感觉功能比Juno更强大.​
    ----后来我转atom了,Juno这个插件简直好用,不多说,谁用谁知道2333

    看着讲得挺专业,最后推荐的是atom。atom也是一款类似于sublimetext的文本编辑器,不过是开源的。不过,每个人都有自己的爱好。我会Python,所以我选择jupyter。于是,我得知道如何使用jupyter编写Julia。Julia和Jupyter,这两个都姓Ju,应该不错吧。在百度如何使用jupyter的过程中发现了这么一段话

    Jupyter是(Julia一个面向科学计算的高性能动态高级程序设计语言)、Python 以及R(统计分析、绘图的语言和操作环境)的组合。

    嗯,还真是一家的。
    我推荐大家使用Anaconda,装好后自动安装了Jupyter。国内网站去Anaconda官网下载的话会非常慢,大家可以到清华镜像站https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
    下载。下载好后,大家自行安装即可。因为我之前已经安装过了,并且这应该也不是什么难事,所以就不再介绍怎么装anaconda。如果遇到问题,大家请百度。
    接下来,我们要在jupyter中使用julia。在这篇文章中https://www.jianshu.com/p/3839fb08be1a
    介绍了步骤。

    • 1.找到anaconda中jupyter的实际位置。打开anaconda的prompt shell image.png 在其中输入where jupyter,你将得到一个路径答案,像我的是C:\ProgramData\Anaconda3\Scripts\jupyter.exe。把这个答案拷贝。在终端中拷贝东西操作比较麻烦,动不动就没复制成功,大家自己琢磨吧。
    • 2.打开julia。就是我们刚才用于计算器演示的界面。然后输入,ENV["JUPYTER"]="C:\\ProgramData\\Anaconda3\\Scripts\\jupyter.exe"。注意一定要把单斜杠换成双斜杠,否则就报错了。
    • 3.再输入Pkg.add("IJulia")。我想大家肯定也会遇到和我一样的问题,如下
      image.png
      什么?居然未定义。那百度一下,得到的答案是输入using Pkg,接着我们上述的步骤Pkg.add("IJulia")。这一步很漫长。看终端给出的过程,貌似是它在从github上下载IJulia。我从github上下东西一直就很慢,没办法,等着吧。趁着这段时间讲点闲话,我看以后和github打交道的机会会很多,因为Julia是托管在github上的
    • 4.(可选)输入Pkg.build("IJulia")。这个命令只在编译IJulia失败时有效。如果是其它错误,比如,客官往下看。
    • 5.使用IJulia。输入using IJulia。但是发现出错了。
      image.png
      仔细往上翻,发现是IJulia没有安装好。我这里显示是ZMQ这个包没有装好。WHAT?!好吧,其实主要是由于github的网太烂了,这个包没有下载成功。这里有两种解决方案:一、修改host文件,加速github网站访问速度。这个方法当然好,但是我试了半天没弄成。所以只好采用另一种方案,手动下载所需要的文件。下载地址以及把文件下载到哪个位置去已经在错误报告里给出了。比如
      image.png
      所以,我们从https://github.com/JuliaInterop/ZMQBuilder/releases/download/v4.2.5+6/ZMQ.x86_64-w64-mingw32.tar.gz下载文件,把它放到C:\Users\Administrator\.julia\packages\ZMQ\ABGOx\deps\usr\downloads\ZMQ.x86_64-w64-mingw32.tar.gz。我找到一个github下载加速站http://tool.mkblog.cn/github/。大家可以试试。
      弄好之后,再次执行using IJulia。如果还是出错的话,那估计又是缺少包,依法炮制即可。
      *6.启动Jupyter。输入notebook()。正常的话,在浏览器中会自动打开Jupyter。
      image.png
      点击New,新建一个Julia。这时会开启一个新的页面。如下
      image.png
      此刻,我们就可以开始在Jupyter中执行Julia的代码了。找一段代码试试,结果如下。
      image.png
      在输入框中输入
    function printlyrics()
        println("I'm a lumberjack, and I'm okay.")
        println("I sleep all night and I work all day.")
    end
    printlyrics()
    

    然后点击上边的运行按钮,你就会得到我图中给出的结果。这里定义了一个函数叫printlyrics,然后执行。函数内部输出了两条语句。关于这些语言的细节,我们后续会详细的讲解。
    今天主要在本地搭建好了Julia开发环境。其实一切都还算顺利,出了github网络有点不太给力。千里执行始于足下,我们今天算是迈出了最重要的一步。
    大家在操作的过程中遇到了其它问题——我比较幸运没遇到,可以给我留言。这样,我们可以一起把这些问题解决,共同打造一个非常全面的Julia学习教程。

    相关文章

      网友评论

        本文标题:初识Julia

        本文链接:https://www.haomeiwen.com/subject/zbvwoctx.html