Julia教程1:Julia學習資料與工作環境

2021-03-02 阿爾山下

工欲善其事,必先利其器。學習一門語言之前,能夠清楚的知道碰到問題可以去哪裡找答案是非常重要的,同時一個個性化的工作環境更是可以讓工作效率成倍提升。這裡就我收集的一些Julia的學習資料介紹一下,並介紹一下如何搭建一個Julia的工作環境。

學習資料

由於是一門比較新興的語言,所以其實學習資料並不是特別多,特別是對於那些對計算機編程本身就不熟悉的人來說,更是麻煩。這也是我寫這個系列的初衷。

不過任何教程都不可能把所有的細節都寫出來,所以當碰到問題的時候,能夠找到權威的資料是最好不過的。幸運的是,Julia在documentation這方面對中國使用者還是非常友好的。下面可以總結一下:

1、Julia Documentation。可以直接從julia的官網上找到julia的官方手冊:http://docs.julialang.org/en/release-0.4/ 。此外,由於Julia的開發團隊有中國人的身影,所以Julia的文檔對中國使用者也非常友好,中文版的文檔可以從http://julia-zh-cn.readthedocs.org/zh_CN/latest/ 找到。實際工作中碰到什麼樣問題,除了google/bing之外,最方便的莫過於查手冊了。

2、Julia 的Package的主頁。Julia現在已經有了非常多的擴展包,比如廣義線性模型的GLM,整理統計數據的DataFrames,畫圖的Gadfly,最優化的Optim,保存成Matlab類型數據的MAT.等等等等。這些包的使用方法基本上都可以在很快的使用『Julia+package name』在bing/google上搜索出來。當然,搜索出來的很多都是在GitHub上的頁面,一般裡面會有非常詳盡的描述。介紹這些Package的時候我也會具體介紹。

3、一個針對與經濟性的Julia教程系列:http://juliaeconomics.com 。這個系列雖然還沒有太多內容,不過也是非常不錯的材料。比較有意思的是這個博客裡面有這麼一篇文章:《Why I Switched to Julia》,來自U. of Chicago的Bradley J. Setzler分享了他為什麼轉而使用Julia:因為他用python寫的程序24小時跑不完,Julia用了5分鐘給了他正確的結果:

I am currently estimating a structural econometric model of game-theoretic parent-child interaction. Using the standard implementation of Python (the code is written entirely in NumPy and SciPy with data prepared by Pandas), the optimizer ran for 24 hours, then terminated due to the 5,000 iteration limit. It was converging smoothly, but never quite arrived. While waiting for the estimates last night (and growing increasingly impatient), I installed Julia and its packages, learned how to program in Julia, rewrote the estimation in Julia, and this morning successfully optimized the likelihood in Julia.

The contrast is staggering: the optimization that didn’t converge after 24 hours in Python converged after only 15 minutes in Julia while Python was still running on the same processor. Julia was already achieving a greater likelihood than Python after only 5 minutes even though Python had a 20-hour head start. They are both using the same optimization algorithm (including numerical tolerance), and the structure of the code is identical. Julia evaluates the likelihood in 0.5 seconds, while Python requires 21 seconds per evaluation, so Julia is about 40 times faster in the function evaluation, and about 100 times faster in the optimizer (I’m giving Python the benefit of the doubt even though it never converged).

這位大神在等待他的Python結果的無聊時間裡學會了Julia、用Julia重寫了程序,運行,15分鐘給出了結果。他計算出,每次計算極大似然的時候,Julia的效率是Python的40倍,而優化的效率是Python的100倍。至於為什麼,可以看之前的那篇文章。

4、2011年諾獎得主Sargent做了個網站,http://www.quant-econ.net/ 裡面包含了很多常用的模型的Julia實例,包括Asset Pricing、On-the-Job Search等,而且網站還有Julia和Python的教程,對於經濟學生來說的確是不可多得的珍貴材料。

工作環境

由於Julia的快速發展,Julia再也不是只有醜陋的純字符界面的程序語言了。一些不錯的IDE已經出現,雖然比起Python來還是差了很多,不過基本上已經可以用了。這裡介紹我比較熟悉的兩個工具:Juno以及Sublime。

首先是Juno,這是Julia官網上推薦的IDE,雖然比較簡陋,不過已經能夠很好的滿足日常需求了。而且Juno在Windows/Linux/Mac上都可以使用,跨平臺特性非常好。

Juno可以從Julia的官網進行安裝。不過如果是Windows或者Mac用戶,想要在Terminal裡面直接運行Julia,還需要一點配置。以mac為例,可以直接編輯~/.bash_profile 文件,插入下面一樣:

export PATH="$PATH:/Applications/Juno.app/Contents/Resources/app/julia/bin/"

重新啟動Terminal就可以直接數據Julia使用Julia了。當然,如果不做上面一步,Juno還是可以使用的。

Juno的界面非常簡潔,首次打開有個Tutorial,跟著這個Tutorial做,就能學會Juno了。

比如一個簡單的程序:

直接輸入\就可以輸入latex代碼,β就是這麼輸入進去的。當然如果你高興也可以使用中文作為變量名,當然最好不要這麼做。

使用Evaluation菜單的Eval Block就可以讓選中的程序運行,並顯示出結果(如圖)。

此外圖也可以在Juno上面顯示:

雖然Juno很酷炫,但是我還是不是很喜歡。因為平時經常寫不止一種語言,因而對我來說,熟練使用一種編輯器非常有必要。我個人的偏好是使用Sublime,因為插件多,用著比較順手,對Julia的支持雖然還沒有非常的豐富,但是對我來說已經夠用了。

此外,Git社區出的編輯器Atom也是非常不錯的選擇,而且已經有了對Julia的強大支持。感興趣的可以看這個網頁:https://atom.io/packages/language-julia ,我就不多說啦。

如果使用Sublime,需要一些配置步驟才能做到「方便」。首先,Sublime並沒有對Julia的原生的語法高亮,所以第一步是安裝語法高亮。可以先去https://packagecontrol.io/installation 按照提示給Sublime安裝一個Package Control,然後再從Sublime的Preference裡面找到Package Control,選擇Install Package(或者control+shifit+p/command+shift+p,輸入package control,選擇Install Package),彈出來的框中輸入Julia,選中就可以了:

然後配置build system。選擇Tools->Build System->New Build System... 彈出來的文件中輸入:

{ "shell_cmd": "julia $file"}

默認保存路徑保存為「Julia.sublime-build」就可以了。這樣以後寫完程序,直接按control+B/command+B就可以直接運行了:

相關焦點

  • 1 Julia簡介及安裝
    他們想要的是一個開源的軟體,它要像C語言一般快速而有擁有如同Ruby的動態性;要具有Lisp般真正的同像性而又有Matlab般熟悉的數學記號;要像Python般通用、像R般在統計分析上得心應手、像Perl般自然地處理字符串、像Matlab般具有強大的線性代數運算能力、像shell般膠水語言的能力,易於學習而又不讓真正的黑客感到無聊;還有,它應該是交互式的,同時又是編譯型的……
  • Julia入門教程-變量
    UndefVarError: X not defined# 可以使用UTF-8編碼的unicode字符作為變量名julia> 變量="中文變量""中文變量"# 可以通過輸入\delta tab來輸入julia> δ="1.0""1.0"# 可以通過輸入\alpha tab來輸入julia> α=1.01.0可以通過輸入\alpha tab來輸入\hat tab_2julia
  • Julia入門教程-算術運算
    ⊻ 234145julia> xor(123,234)145julia> 123>>161julia> 123<<1246julia> 123>>>161複合賦值運算符每一個二元運算符和位運算符都可以給左操作數複合賦值
  • Julia CFD|00 系列說明
    該系列是一個學習計算流體動力學基礎的實用模塊,通過編制電腦程式求解描述流體流動物理的基本偏微分方程。系列來自于波士頓大學機械工程系Lorena Barba教授2009年至2013年期間所教授課程的一部分(Barba教授後來搬到喬治華盛頓大學),項目地址:https://github.com/barbagroup/CFDPython。
  • Julia CFD 00 系列說明
    該系列是一個學習計算流體動力學基礎的實用模塊,通過編制電腦程式求解描述流體流動物理的基本偏微分方程。系列來自于波士頓大學機械工程系Lorena Barba教授2009年至2013年期間所教授課程的一部分(Barba教授後來搬到喬治華盛頓大學),項目地址:https://github.com/barbagroup/CFDPython。
  • Julia(建設者)
    這很簡單:julia> Foo(x) = Foo(x,x)Foojulia> Foo(1)Foo(1, 1)您還可以添加一個零參數Foo>T2(x) = new(x)endjulia> T1(1)T1(1)julia> T2(1)T2(1)julia> T1(1.0
  • Julia入門教程-複數和有理數
    由於Julia 允許數值字面量作為係數與標識符並置,這種綁定就足夠為複數提供很方便的語法,類似於傳統的數學法:julia> 1+2im1 + 2im你可以對複數進行各種標準算術操作,示例:julia> (1 + 2im)*(2 - 3im)8 + 1imjulia> (1 + 2im)/(1 -
  • 這裡有一份Julia極簡入門教程
    Julia 1.0 重磅發布》的文章,為各位讀者報導了有關新興程式語言 Julia 1.0 的有關情況,當時有不少讀者在評論區留言:有沒有教程?今天我們就為有這個需求的讀者朋友們帶來 Julia 極簡入門教程,希望可以幫到你!
  • Julia-BioStructures
    #使用MMCIFDict將mmCIF讀入到字典中julia> mmcif_dict = MMCIFDict("/path/to/cif/file.cif")mmCIF dictionary with 716 fields#可以通過類似與字典的方式訪問MMCIFDictjulia> mmcif_dict["_entity_src_nat.common_name"]1-element
  • 使用Pyhon+Flux+Julia實現手寫數字識別
    在本教程中,我們將介紹如何使用Julia程式語言和名為Flux的機器學習庫來實現這一技術。為什麼使用Flux和Julia?本教程為什麼想使用Flux(https://fluxml.ai/) 和Julia(https://julialang.org/) ,而不是像Torch、PyTorch、Keras或TensorFlow 2.0這樣的知名框架呢?
  • Julia的暗黑語法:Unicode輸入
    (理工科的同學,推薦學習LaTeX,你的氣質會因此改變~)值得一提的是,TeX的bug特別少,版本號是用圓周率 π來約定,第一個版本3.14,接著3.141,3.1415,以此類推。高德納明確表示找到一個bug,獎金翻一倍,對他的代碼極為自信。不過,確實如同高德納所說,TeX的bug極少,找到三個bug後好像就沒什麼bug了。
  • Julia(複數和有理數)
    提升機制確保不同類型的操作數的組合可以正常工作:julia> 2(1 - 1im)2 - 2imjulia> (2 + 3im) - 11 + 3im+ 1.5imjulia> (2 + 3im) / 21.0 + 1.5imjulia> (1 - 3im) / (2 + 2im)-0.5 - 1.0imjulia> 2im^2
  • 全網首發Julia中文視頻教程:1小時上手機器學習的明日之星
    不久前 Python 剛剛登頂最火的人工智慧語言,所以你要趕快學習Python?更快的路徑是,去掌握5年之後會超越 Python 的語言新秀——Julia。隨著Julia1.0版本的發布,這門語言已經成熟,在未來5年內都有穩定的API,面向工業界的應用正在開啟。
  • Julia編程基礎 - 第 5 章 數值與運算(中)
    它使用起來是這樣的:julia> 1 + 2im; typeof(1+2im)Complex{Int64}julia> 1.1 + 2.2im; typeof(1.1+2.2im)Complex{Float64}julia>可以看到,Complex 是一個參數化的類型。
  • 用C++加速julia:BMP圖片讀取
    ImageMagick.jl方案那要不用julia自己的庫?ImageMagick.jl 給大名鼎鼎的ImageMagick庫做了封裝,速度應該不錯。這裡有個小坑,對於bmp格式的圖,默認是3通道!bmp格式裡明明有一位告訴了通道數,就這樣被忽略了。無奈,必須先轉灰度圖,變成了0-1的8位浮點表示。
  • 開發人員應該了解的五款Julia IDE
    同時,確保已經下載並安裝了 Atom 1.2.3 以上版本。https://julialang.org/downloads/要安裝 Juno,輸入「uber-juno」並點擊安裝。Atom 會自動為你搭建 Juno 環境。
  • 如何使用 Julia 語言實現「同態加密+機器學習」?
    也就是說,對機器學習程序包的開發者而言,這些限制並不罕見。像 GPU 這樣有特殊用途的加速器,也可以處理數字向量。julia> using ToyFHE# Let's play with 8 element vectorsjulia> N = 8;# Choose some parameters - we'll talk about it laterjulia> = NegacyclicRing(2N, (40, 40, *40*))/(x + 1)#
  • Julia語言介紹,與大熱門Python有啥區別呢?
    Julia的包以下是一些最受開發者歡迎的軟體包:1.interact.jl:交互式小部件,例如下拉、滑塊和複選框,可以輕鬆地實現julia代碼。2.Generic Linear Algebra:用於擴展線性代數的功能。
  • 用Julia實現你自己的源對源自動微分!
    with 1 method)julia> @code_ir foo(1.0)1: (%1, %2) %3 = 1:10 %4 = (Base.iterate)(%3) %5 = %4 === nothing %6 = (Base.not_int)(%5) br 3 unless %6 br 2 (%4)
  • Julia語言與宏觀經濟應用(1): Why Julia?
    (2015)、Jon Danielsson, Jia Rong Fan(2018)、Fernández-Villaverde J, Valencia D Z(2018)的文章(參見經濟分析中的程式語言:R、Matlab、Python和Julia),我心頭又一熱想學學,因此,開始找一些資料和書籍開始學習