julia系列1:介绍与安装(代码片段)

IE06 IE06     2022-12-07     407

关键词:

参考 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系列3:函数模块与宏(代码片段)

1.控制流1.1复合表达式复合表达式使用begin和(;)或者使用小括号:1.2循环while和for为循环关键字,用end结束,没有:符号并且不需要缩进:python中的range(N)在julia中用1:N表示,数据类型为UnitRange或者StepRange,和a... 查看详情

mongodb4系列概述与安装和资源介绍(代码片段)

文章目录MongoDB4系列(1)概述与安装前言概述主要特点mongoDB的云库MongoDB资源Studio3TRobo3TmorphiaMongoDBJavaDriversWindows安装mongoDBStudio3T连接mongoDB连接altas云库java代码连接altas云库总结参考文献MongoDB4系列(1)概述与安装... 查看详情

julia系列10:applem1gpu编程(代码片段)

1.julia安装首先去官网,找到对应的版本下载,苹果m1芯片对应的M-series然后打开julia,安装IJulia:usingPkgPkg.add("IJulia")然后打开jupyter,就可以新建julia页面了。2.m1gpu编程库:Metal安装:julia>imp 查看详情

julia系列2:数据结构(代码片段)

1.变量与常量1.1定义虽然Julia允许我们随意改变一个变量的类型,但是这样做往往会对程序的性能造成不小的负面影响。我们可以在编程的时候用附加类型标识符的方式让变量的类型固定下来,比如:y::Int64。操作符::... 查看详情

julia系列2:数据结构(代码片段)

1.变量与常量1.1定义虽然Julia允许我们随意改变一个变量的类型,但是这样做往往会对程序的性能造成不小的负面影响。我们可以在编程的时候用附加类型标识符的方式让变量的类型固定下来,比如:y::Int64。操作符::... 查看详情

julia系列3:函数模块与宏(代码片段)

1.控制流1.1复合表达式复合表达式使用begin和(;)或者使用小括号:1.2循环while和for为循环关键字,用end结束,没有:符号并且不需要缩进:python中的range(N)在julia中用1:N表示,数据类型为UnitRange或者StepRange,和a... 查看详情

linux上安装julia-1.1(代码片段)

Julia在Linux上的安装浙江大学Julia镜像:浙江大学Julia镜像下载1.1版本:wgethttps://mirrors.zju.edu.cn/julia/releases/v1.1/julia-1.1.1-linux-x86_64.tar.gz解压Juliatar-zxvfjulia-1.1.1-linux-x86_64.tar.gz进入Julia的执行文件目录cdjulia-1.1. 查看详情

elasticsearch系列:安装与介绍(代码片段)

简介Elasticsearch是一个基于Lucene构建的开源搜索引擎,简称ES。它是使用Java语言开发的,并提供了简单易用的RestFulAPI,是一种流行的企业级搜索引擎。Elasticsearch的术语Elasticsearch与MySQL概念上的类比如下表:MySQLElasticsearchTableIndex(T... 查看详情

julia系列10:applem1gpu编程(代码片段)

1.julia安装首先去官网,找到对应的版本下载,苹果m1芯片对应的M-series然后打开julia,安装IJulia:usingPkgPkg.add("IJulia")然后打开jupyter,就可以新建julia页面了。2.m1gpu编程库:Metal安装:julia>importPkg... 查看详情

julia系列2:数据结构(代码片段)

1.变量与常量1.1定义虽然Julia允许我们随意改变一个变量的类型,但是这样做往往会对程序的性能造成不小的负面影响。我们可以在编程的时候用附加类型标识符的方式让变量的类型固定下来,比如:y::Int64。操作符::... 查看详情

julia系列5:文本图像其他语言函数互动(代码片段)

1.文件读写语法和python很像,读文件使用open-readlines-close,写文件使用open-println(file,data)-close使用DelimitedFiles包中的readlm()读取csv文件。1.1读文件readline读取一行;readlines读取所有行为一个数组;eachline读取为一个迭... 查看详情

julia系列5:文本图像其他语言函数互动(代码片段)

1.文件读写语法和python很像,读文件使用open-readlines-close,写文件使用open-println(file,data)-close使用DelimitedFiles包中的readlm()读取csv文件。1.1读文件readline读取一行;readlines读取所有行为一个数组;eachline读取为一个迭... 查看详情

微服务系列之nacos配置中心之一:nacos介绍与安装(代码片段)

一、Nacos介绍Nacos是Alibaba公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。英文全称DynamicNamingandConfigurationService,Na为Naming/NameServer即注册中心,co为Configuration即配置中心,Service是指该注册/配置中心都是以服务... 查看详情

mongodb4系列概述与安装和资源介绍(代码片段)

文章目录MongoDB4系列(1)概述与安装前言概述主要特点mongoDB的云库MongoDB资源Studio3TRobo3TmorphiaMongoDBJavaDriversWindows安装mongoDBStudio3T连接mongoDB连接altas云库java代码连接altas云库总结参考文献MongoDB4系列(1)概述与安装... 查看详情

julia系列12:聚类算法包(代码片段)

引用“usingClustering”,使用方法如下:1.K-means简单例子:usingClustering#makearandomdatasetwith1000random5-dimensionalpointsX=rand(5,1000)#clusterXinto20clustersusingK-meansR=kmeans(X,20;maxiter=200,display=:iter)@assertnclusters(R)==20#ve... 查看详情

(转)navicatpremium12.1.8.0安装与激活(代码片段)

...本使用。博主所提供的激活文件理论支持NavicatPremium12.0.x系列和NavicatPremium12.1.x系 查看详情

运筹系列80:使用julia精确求解tsp问题(代码片段)

1.基础模型使用flow约束构建基础模型usingTSPLIB,JuMP,GLPK,Distancestsp=readTSP("25.tsp")N=tsp.dimensiondistmat=[euclidean(tsp.nodes[i,:],tsp.nodes[j,:])foriin1:N,jin1:N]m=Model(GLPK.Optimizer)@variable(m,x[1:N,1:N],Bin)@objective(m,Min,sum(x[i,j]*distmat[i... 查看详情

opencv学习系列(零)mac下opencv+xcode环境搭建(代码片段)

#OpenCV学习系列(零)Mac下OpenCV+xcode环境搭建[-=博客目录=-]1-学习目标1.1-本章介绍1.2-实践内容1.3-相关说明2-学习过程2.1-homebrew安装2.2-使用homebrew安装CMake2.3-源码安装OpenCV2.4-xcode配置与测试2.5-基础问题回答3-资料1-学习目标1.1-本... 查看详情