julia系列1:介绍与安装
Posted IE06
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了julia系列1:介绍与安装相关的知识,希望对你有一定的参考价值。
参考 https://zhuanlan.zhihu.com/p/41953244
还有这篇教程:https://zhuanlan.zhihu.com/p/60889456
详见julia中文文档:http://cn.julialang.org/JuliaZH.jl/latest/
1. 介绍
1.1 背景
Julia是麻省理工学院计算机科学和人工智能实验室(Csil)开发和孵化的一种免费开放源码语言,于2012年发布,目标是结合C的速度与Python的可用性、Ruby的动态性、MATLAB的数学能力和R的统计能力。麻省理工学院说Julia是“petaflop club“中唯一的高级动态语言,在世界第10大超级计算机Cori上被用来模拟1.88亿颗恒星、星系和其他天体,模拟运行只需14.6分钟,使用650000Knights Landing Xeon Phi 核,有1.5千兆秒的运算(每秒四万亿次浮点运算)。
总的来说,目前还是MIT的老师和学生在推Julia。Julia开发都通过GitHub进行(社区驱动),现在上面的代码贡献者有200名左右,稳定的、高度活跃的贡献者约有30名。目前Julia主要用在科学计算上,另外Julia足以胜任的领域之一是教育。下一代学生可以直接跨过现有的技术。IJulia图形化的Notebook集成(运行Julia的IPython Notebook)使之对于教学极具魅力。研究者、算法开发者和库作者也在采用Julia,因为Julia使工作更高效。
1.2 特性
Julia能将工作负载分散到数十万个处理器核,这导致它从机器学习到大规模超级计算机模拟等各个方面的应用。
Julia采用即时编译的策略,底层通过LLVM实现,可以为多个平台编译高效的本地代码。在某些情况下,Julia 可以接近甚至达到 C 语言的速度。我们在下一篇文章会介绍julia的性能提升秘诀。
从本质上来说,Julia更倾向于是一种编译型语言,而不是解释型语言。
Julia的多分派dispatch范式是指允许函数重名,并会在调用时自动根据传入的参数类型进行分派,非常像java/C++中的函数重载,区别在于,C++/Java是在编译时完成分派,而Julia是在运行时完成这一工作。使用它的多分派dispatch范式能表达许多面向对象和函数编程范式,它还有一个非常适合数学运算的语法,有许多数字数据类型和内置的并行支持。
Julia和numpy一样,支持广播机制,可以在GPU和其它向量化硬件上实现高效的优化计算。
Julia 的 Base 包和标准库都是由 Julia 语言编写的。这包括像整数运算那样的基本操作。也就是说,Julia 实现了一定程度的自举。
1.3 安装软件
mac上安装很简单,brew cask install julia即可。如果你已经安装了jupyter notebook的话,直接输入jupyter notebook启动即可。
linux上安装,到julia官网下载julia,然后解压,配置到环境变量中,sudo vim .bashrc,在环境变量中加上这句,注意这里要写你的julia的bin的路径:export PATH=“/myapp/julia/bin:$PATH”,然后执行终端输入 julia 顺利执行到julia交互界面,到这里就安装成功了,如果想要安装julia notebook环境,就往下看
在julia 交互界面执行
using Pkg
Pkg.add("IJulia")
using IJulia; notebook(detached=true)
然后就安装成功了。
启动julia时有一系列可配置参数:
- -e:用于直接对跟在后面的表达式进行求值。例如,我们可以输入julia -e 'a = 5 * 8; println(a)'并回车。这时,julia会对单引号内的表达式进行逐一求值。多个表达式之间需要以英文分号;分隔。第二个表达式println(a)在被求值时会在计算机的标准输出上打印40。当所有求值都完成后,julia命令会直接退出(返回命令行提示符)。
- -E:与-e的功能很类似。但不同的是,追加该参数的julia命令在退出之前还会在标准输出上打印出最后一个表达式的求值结果。上面的第二个表达式println(a)的求值结果会是nothing,表示没有结果值。
- -p:指定用于处理并行任务的工作进程的数量。跟在它后面的值必须是一个大于 0 的整数,或者为auto(指代当前计算机的 CPU 逻辑核心数)。例如,如果我们输入的命令是julia -p 5,那么工作进程的总数就会是6。这是因为 REPL 环境本身还会占用一个工作进程。如果不追加参数-p,那么 Julia 就不会产生额外的工作进程。
- -i:用于以交互模式运行命令。这意味着,命令执行后将进入 REPL(Read–eval–print loop)环境。简单来说,这个 REPL 环境就是一个可以与 Julia 的运行时系统进行即时交互的界面。比如,你在这个环境中输入println(“abc”)并回车,它立马就会回显独占一行的abc和一个空行。从字面上我们也可以了解到,该环境会读取你输入的表达式、对读到的表达式进行求值、显示表达式的求值结果,然后再次等待读取。如此循环往复。如果我们在输入julia命令的时候没有追加任何源码文件,那么它就会以交互模式运行。
1.4 安装包
如果出现git问题,切换shell模式,执行:
git config --global http.proxy ‘socks5://127.0.0.1:1080’
git config --global https.proxy ‘socks5://127.0.0.1:1080’
julia的包以xx.jl的方式命名,文件里面用module、end包住。自定义的julia包首先要使用activate命令激活,然后就可以使用import xx或者using导入。当然也可以托管到github上,然后add到本地。
输入julia进入julia PERL,然后输入Pkg.add(“PackageName”)安装包;也可以按 ] 键进入pkg模式。接着就可以使用using或者import来调用包了:
julia> using IJulia
[ Info: Precompiling IJulia [7073ff75-c697-5162-941a-fcdaad2a7d2a]
julia> notebook()
Julia目前所有包均可在https://juliapackages.com/上找到。常用包介绍如下:
基本数据结构:DataFrames
交互:CSV, JSON, XLSX
随机数:Random,StatsFuns
微分方程:DifferentialEquations
线性代数:LinearAlgebra,IterativeSolvers
统计:Turing(贝叶斯),Distributions,StatsBase,Regression,MixedModels,CurveFit,Interpolations,MultivariateAnalysis,HypothesisTests,POMDPs(马尔科夫决策过程模拟),HMMBase,TimeSeries
凸优化:JuMP(建模)、Convex(凸优化)、GeneticAlgorithms(遗传算法)
绘图:Gadfly(科学绘图)、Plots(可视化),注意这个包的依赖比较大,国内要改一下下载代码:https://zhuanlan.zhihu.com/p/115118883
图论:LightGraphs
机器学习:Flux
深度学习:Knet
写作:Latexify
2. 使用技巧
- 各种模式:输入;可以进入shell模式,相当于ipython下的!号;输入 ] 键进入pkg模式。
- 注释:单行注释类似python,用#;多行注释用#=和=#;也可以用markdown注释方式,前后都用"""围起来即可
- 快捷键:除了Ctrl+c之外,Julia 的 REPL 环境还支持不少的快捷键。在 macOS 操作系统中,最常用的快捷键有:
Option+←:将光标移动到左边最近的单词开始处。
Option+→:将光标移动到右边最近的单词末尾处之后。
Ctrl+d:退出julia命令,回到原始的命令行。
Ctrl+e:将光标移动到当前行的末尾处之后。
Ctrl+a:将光标移动到当前行的开始处。
Ctrl+l:清除当前界面中的历史命令,或称清屏。
Ctrl+r:向后搜索历史命令。
Ctrl+s:向前搜索历史命令。 - 多进程:使用
-p n
起n个进程 - 分布式:使用
--machine-file file
会对file中的每一行启动一个worker。 - 传参:使用PROGRAM_FILE获取文件名,使用ARGS获取参数列表
$ echo 'println(PROGRAM_FILE); for x in ARGS; println(x); end' > script.jl
$ julia script.jl foo bar
script.jl
foo
bar
- 列举变量:varinfo()方法会列出所有当前存储的变量和模块。
- 上次结果:用ans表示
julia> x = 1
1
julia> ans + 1
2
- 特殊字符:可以输入`+符号名称的方式来输入更多的Unicode数学字符,如\\alpha后按tab键就会出现α的字符。
- 类型的最大最小值:typemin和typemax
(typemin(Int32), typemax(Int32))
>>(-2147483648, 2147483647)
typemax(Int64)+1
>>-9223372036854775808
以上是关于julia系列1:介绍与安装的主要内容,如果未能解决你的问题,请参考以下文章