Julia教程:Julia语言入门

正如我在“ 朱莉娅是什么? ”, Julia是一种用于数值计算的免费开源高级,高性能动态编程语言,它将动态语言的开发便利性与已编译的静态类型语言的性能相结合。 它设计用于科学计算,机器学习,数据挖掘,大规模线性代数,分布式计算和并行计算,并且易于使用Python,R甚至Matlab。

使用Julia的方法有五个主要选择: Julia命令行的安装; JuliaPro的安装; Visual Studio Code以及一个插件和一个Julia或JuliaPro安装; 和Juyter笔记本和IJulia。 让我们考虑一下每种方法的利弊。

[InfoWorld的要点: 用于AI开发的5种最佳编程语言 为什么应该使用Python进行机器学习 朱莉娅与Python的对决:朱莉娅语言在数据科学方面的兴起5个基本的Python数据科学工具-现已得到改进数据科学的Python发行版Anaconda入门 Python的Anaconda发行版中的新增功能 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

JuliaBox在线不需要安装或维护,您可以使用免费帐户开始。 它是为Jupyter笔记本电脑设置的,已经添加了300多个软件包,并且以Jupyter笔记本电脑的形式提供了数十个教程。 许多笔记本与Julia官方视频教程捆绑在一起。 Jupyter笔记本非常适合解释您的计算,如下所示。

juliabox线性代数IDG

Jupyter笔记本使您随身携带的文件变得很容易。

不利的一面是,JuliaBox的免费层有时看起来很慢,尽管相对便宜的按月付费订阅可以为您提供更多的内核,更多的RAM和更长的会话。 此外,Jupyter笔记本比大笔记本更适合解决小问题,并且不如实际编程的IDE好。

正如我在“ 朱莉娅是什么? ”, Julia是一种用于数值计算的免费开源高级,高性能动态编程语言,它将动态语言的开发便利性与已编译的静态类型语言的性能相结合。 它设计用于科学计算,机器学习,数据挖掘,大规模线性代数,分布式计算和并行计算,并且易于使用Python,R甚至Matlab。

使用Julia的方法有五个主要选择: Julia命令行的安装; JuliaPro的安装; Visual Studio Code以及一个插件和一个Julia或JuliaPro安装; 和Juyter笔记本和IJulia。 让我们考虑一下每种方法的利弊。

[InfoWorld的要点: 用于AI开发的5种最佳编程语言 为什么应该使用Python进行机器学习 朱莉娅与Python的对决:朱莉娅语言在数据科学方面的兴起5个基本的Python数据科学工具-现已得到改进数据科学的Python发行版Anaconda入门 Python的Anaconda发行版中的新增功能 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

JuliaBox在线不需要安装或维护,您可以使用免费帐户开始。 它是为Jupyter笔记本电脑设置的,已经添加了300多个软件包,并且以Jupyter笔记本电脑的形式提供了数十个教程。 许多笔记本与Julia官方视频教程捆绑在一起。 Jupyter笔记本非常适合解释您的计算,如下所示。

juliabox线性代数IDG

Jupyter笔记本使您随身携带的文件变得很容易。

不利的一面是,JuliaBox的免费层有时看起来很慢,尽管相对便宜的按月付费订阅可以为您提供更多的内核,更多的RAM和更长的会话。 此外,Jupyter笔记本比大笔记本更适合解决小问题,并且不如实际编程的IDE好。

如果安装开源Julia命令行 ,则需要添加许多软件包才能使其变得有用。 从好的方面来说,命令行可以快速安装。 不利的一面是,打扰您的开发流程以安装缺少的软件包可能很烦人。

朱莉娅命令行IDG

Julia命令行。

JuliaPro为Julia命令行提供了预安装的许多软件包(如上所示),并添加了基于GitHub Atom编辑器的Juno IDE(如下所示)。 JuliaPro提供免费的个人版和付费企业版。 Juno是用于Julia编程和调试的不错的多窗格环境。

适用于您的操作系统的JuliaPro快速入门指南将包括Julia命令行的位置。 它因版本而异。 虽然您可以并排安装Julia的多个版本,但无需这样做。 更新Julia时,还应该更新软件包: Pkg.update()

朱莉娅·朱诺·伊德IDG

Julia的Juno IDE基于Atom。

另一个不错的选择是使用Visual Studio Code开发Julia程序。 您需要安装Julia命令行,并将Julia插件添加到Visual Studio Code。 我必须先关闭并重新启动Visual Studio Code,然后它才能识别命令行位置。 这种配置为您提供了与Juno相似的功能,包括Julia Plot窗格,其优点是除了Julia之外还可以使用其他语言进行编程。

朱莉娅视觉工作室代码IDG

Julia在Visual Studio代码中。

IJulia for Jupyter笔记本电脑为您提供了一个类似于JuliaBox的环境,您可以根据需要在自己的计算机上运行它。 您需要通过安装Anaconda或使用pip来安装适用于Python 2或Python 3的Jupyter。 一旦工作成功,并且从Julia命令行使用Pkg.add("IJulia")安装了Pkg.add("IJulia") ,则可以启动IJulia和notebook()

using IJulia
notebook()

如果要为笔记本服务器创建新进程,则可以使用Julia的notebook(detached=true) 。 如果要在Julia的特定目录中打开笔记本,则可以使用dir参数notebook(dir="/some/path") 。 默认值为您的主目录。

根据文档,您还应该能够从系统命令行运行jupyter notebook并启动Julia内核。 当前,当我尝试执行笔记本代码行时,这会在MacBook Pro上导致内核异常,即使从Julia命令行启动相同的笔记本也可以正常工作。 我从Julia内部启动了下面显示的笔记本。

朱莉娅朱庇特情节罪IDG

在Jupyter笔记本中使用Gadfly的正弦图。

如果您想在本地而非在线运行JuliaBox教程,则可以从GitHub克隆教程库 。 然后,在本地JuliaBoxTutorials目录中打开一个笔记本,并运行Local_installations笔记本以安装教程中使用的所有软件包。 为此,请花一些时间-这将比您预期的要长。

如果在安装IJulia之后更新Julia或JuliaPro,则需要从Julia命令行Pkg.build("IJulia")重建IJulia。

朱莉娅基础知识

既然您已经在本地设置了Julia或决定使用JuliaBox,那么让我们看一下如何使用它们,并运行一些示例。

首先,打开Julia或JuliaPro REPL。 按? ,并注意提示如何更改以提供help?> 。 输入help并按Enter键,您将看到类似以下屏幕的内容。

朱莉娅cli帮助2IDG

Julia命令行帮助。

现在尝试建议的帮助请求之一,例如?@time ,然后按Enter键。 继续尝试交互式评估某些表达式。 在下面的屏幕截图中,我从@time的帮助中获得了@time ,并且还进行了两次测试-第一次是由于实时(JIT)编译产生了开销。 我可以从帮助中复制和粘贴; 我还能够在终端中向上滚动历史记录以重新运行上一个命令。

朱莉亚时间兰特2IDG

参加朱莉娅·REPL。

完成Julia REPL的播放后,请按Control-D或键入exit()

现在让我们尝试一下JuliaBox。 浏览至https://juliabox.com 。 您将被重定向到此网页:

juliabox开始IDG

JuliaBox起始页。

我通常使用GitHub凭据登录,但请随时使用您的Google或LinkedIn ID登录。 我仍然使用免费订阅。 当我需要更多的内核或更长的会话时,如上所述,我可以使用IJulia在本地运行Jupyter笔记本。

笔记本初始化后,单击进入tutorials文件夹,然后单击intro-to-julia文件夹,再单击short-version,最后打开00.Jupyter_notebooks。 按照说明进行操作,使用Shift-Enter实时浏览笔记本并阅读每一行。 完成的笔记本应大致类似于以下屏幕截图。

juliabox jupyter入门IDG

Julia中完整的Jupyter笔记本教程。

您会注意到? 即使笔记本中的提示未更改,Julia REPL也可以共享帮助符号。 的; shell命令的符号也可以在REPL中使用,并导致提示更改为shell>

朱莉娅壳2IDG

朱莉娅壳。

外壳的确切作用取决于底层操作系统。 在这里,我将MacOS与默认的Bash shell配合使用。 在Windows 10上,从Julia shell>提示符下,我发现必须选择要运行的OS Shell,无论是Command Shell还是PowerShell:

朱莉娅壳windowsIDG

您可以在Windows 10的Julia Shell提示符下访问Command Shell和PowerShell。

回到JuliaBox,关闭00.Jupyter_notebooks笔记本,然后打开01.Getting_to_know_Julia笔记本。 同样,使用Shift-Enter顺序浏览笔记本,并随行阅读每一行。

提示:Unicode的制表符完成序列在“ 与Julia交互”文档中进行了描述,完整列表在Unicode Input文档中 。 搜索\:mahjong:以查看表情符号字形 ,例如\:cat:<TAB>\:dog:<TAB> 这些可在REPL和Julia笔记本中使用。

注意讨论的数据结构。 作为您自己的快速测验,哪些数据结构是可变的,哪些是不可变的? 哪些包含有序序列,哪些包含无序序列?

使用功能时,请特别注意。 请注意用于定义函数的三种语法样式。 还请注意! 在函数名称的末尾:

juliabox变异功能IDG

! 名称末尾表示Julia中的变异函数。

如果继续进行下去,您会看到高阶函数map ,您可能会从其他语言中了解到它,并且broadcastmap的一般化。 还要注意广播的点语法:

juliabox点播IDG

注意Julia的点语法用于广播。

朱莉娅线性代数运算

我强烈建议您继续使用02.Linear_Algebra笔记本,并阅读有关线性代数文档 。 假设您已经学习了大学线性代数并使用矩阵进行了数值计算,那么您必须对以下语言印象深刻:该语言的运算符可以解决线性系统,知道如何表示对称三对角和Hermitian矩阵,并且具有特征值和特征向量的功能,并计算矩阵分解。

juliabox线性代数IDG

Julia对线性代数运算的支持水平令人印象深刻。

朱莉娅基准

在笔记本05.Julia_is_fast中,可以将Julia的速度与其他语言进行比较,以解决一个简单的问题,即求和1000万个随机数。 如果您得到的答案像我的一样,您会发现内置的Julia sum()函数比NumPy快一点。 手写Julia循环的速度大约是该速度的一半,与手写C函数几乎相同。 使用内置Python sum()函数,不带NumPy的普通Python的速度要慢一个数量级,比使用手写Python的速度慢三倍。

朱莉娅基准IDG

朱莉娅的一些基准测试结果。

朱莉娅图形和绘图

朱莉娅(Julia)有很多生成图和显示图形的方法。 Julia中最受欢迎的三个绘图软件包是Plots,PyPlot和Gadfly。

Plots是一个绘图元程序包,它在一个API下带来了许多不同的绘图后端程序包,并在JuliaBox上绘图教程中进行了介绍PyPlot调用标准的Python包Matplotlib,并且是Plots的首选后端之一。 GadflyWickham-Wilkinson样式图形语法的一种实现,类似于流行的R包Ggplot2,并且在Julia的几本出版物中都有介绍,包括语言速度比较基准

让我们尝试从“ 图解”教程中获取一个非常简单的图解示例 。 在您最喜欢的Julia环境中,运行以下程序:

using Plots
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y)

如果收到错误消息告诉您未安装绘图,请使用Pkg.add("Plots")修复,然后重新运行该程序。

在我的安装中,第一次运行向我展示了:

朱莉娅情节简单IDG

使用Julia's Plot plotting meta-package的简单绘图。

当我重新运行该程序时,数据是不同的,因为它是随机生成的,因此折线图看起来有所不同。

为了更好地演示Plots的功能,请考虑Plots文档中的以下程序:

using Plots, ProgressMeter
pyplot(leg=false, ticks=nothing)
x = y = linspace(-5, 5, 40)
zs = zeros(0,40)
n = 100

# create a progress bar for tracking the animation generation
prog = Progress(n,1)

@gif for i in linspace(0, 2π, n)
    f(x,y) = sin(x + 10sin(i)) + cos(y)

    # create a plot with 3 subplots and a custom layout
    l = @layout [a{0.7w} b; c{0.2h}]
    p = plot(x, y, f, st = [:surface, :contourf], layout=l)

    # induce a slight oscillating camera angle sweep, in degrees (azimuth, altitude)
    plot!(p[1],camera=(15*cos(i),40))

    # add a tracking line
    fixed_x = zeros(40)
    z = map(f,fixed_x,y)
    plot!(p[1], fixed_x, y, z, line = (:black, 5, 0.2))
    vline!(p[2], [0], line = (:black, 5))

    # add to and show the tracked values over time
    zs = vcat(zs, z’)
    plot!(p[3], zs, alpha = 0.2, palette = cgrad(:blues).colors)

    # increment the progress bar
    next!(prog)
end

该程序生成的动画GIF如下所示:

朱莉娅积波2IDG

Julia的Plot程序包可以生成精美的3D图。

上面的精美3D图是使用PyPlot作为图的后端创建的。 您可以直接调用PyPlot,前提是您已安装PyPlot并已安装Matplotlib Python软件包。 利用PyPlot README中基本用法示例 ,我们可以在REPL中运行四行代码,并在单独的窗口中获取该图,如下所示:

朱莉娅·普洛普图IDG

您可以直接从Julia调用PyPlot。

实际上,使用PyPlot和PyPlot后端可以进行的所有操作也可以直接使用PyPlot进行。 如果你适应Python代码的呼叫matplotlib.pyplot在朱莉娅的使用,它可能会更快打电话PyPlot不是重写代码的地块。 如果您从一个绿色的字段开始,则调用Plots可能会更容易,这也使您可以选择与另一个后端创建交互式绘图。

Gadfly具有许多功能,并且不依赖Python,但仅限于2D图形。 此外,Gadfly需要一段时间才能发布其第一张图,并且具有许多Julia依赖项。 但是,Gadfly与R程序包Ggplot2非常相似,以至于我马上就弄清了它的语法,因此如果我要改编R绘图代码,便会使用它。 最简单的说,您可以在using语句后using Gadfly生成带有一行代码的绘图:

using Gadfly
plot(sin,0,25)

如果第一行出现错误,请使用Pkg.add("Gadfly")

当我在Julia REPL中运行此代码时,它(最终)打开了一个浏览器选项卡,其中显示了该图:

朱莉娅gadfly sin 2IDG

Julia的Gadfly程序包产生的正弦图。

牛fly图可能非常复杂。 基准笔记本电脑就是一个很好的例子。 遵循Gadfly教程中的示例稍微容易一些,该示例使用标准R数据库进行虹膜分类。 根据运行本示例的位置,可能先运行Pkg.add("RDatasets")

using RDatasets
iris = dataset("datasets", "iris")
plot(iris, x=:SepalLength, y=:SepalWidth, color=:Species,
         Geom.point)

这将显示虹膜中隔长度与中隔宽度的关系,并按物种进行颜色编码,如下所示。 您实际上可以看到这些簇,尤其是在左上方(短而宽的萼片)可以看到Setosa簇。

朱莉娅gadfly虹膜情节2IDG

鸢尾花萼片长度与萼片宽度(按物种)的关系,用朱莉娅的牛Ga作图。

此时,您应该准备继续自己的Julia学习之旅。 除了浏览JuliaBox上的其余教程笔记本以及我们讨论的三个绘图软件包的完整教程之外,您可能还喜欢观看Jane Herriman和其他人保存的网络广播 。 在与网络广播相同的页面上,您还将找到对许多在线教程文档,Julia资源和其他Julia视频的引用。

这个故事“ Julia教程:Julia语言入门”最初是由InfoWorld发布的

From: https://www.idginsiderpro.com/article/3294943/julia-tutorial-get-started-with-the-julia-language.html