Learn Julia the Hard Way:如何从Python/R迁移到Julia的终极教程
Learn Julia the Hard Way:如何从Python/R迁移到Julia的终极教程
Julia作为一种技术计算语言,既具备通用编程语言的能力,又在技术计算领域表现出色。对于习惯了Python或R的开发者来说,迁移到Julia是提升计算效率的绝佳选择。本教程将为你提供从Python/R迁移到Julia的完整指南,助你快速掌握这门强大的语言。
为什么选择从Python/R迁移到Julia?
Julia的开发过程中参考了R的设计理念,并致力于改进R的不足之处。R虽然功能强大,但运行速度相对较慢,很多人仅用它进行快速原型开发,最终会用Python或Java实现生产环境的算法。而Julia则追求像R一样易于使用,同时避免了速度上的劣势。它将函数式编程思想与统计或科学编程领域相结合,对于更倾向于数学思维的开发者来说,Julia的很多特性会显得非常自然。
迁移前的思维转变
告别面向对象,拥抱函数式编程
在Python等面向对象编程语言中,我们习惯了通过对象的方法来操作数据,例如Python中的array.push(x)。而在Julia中,操作数据主要通过函数进行,对应的写法是push!(array, x)。这种函数式的风格是Julia的核心特点之一,需要我们在迁移过程中逐步适应。
理解Julia的类型系统
Julia中没有类的概念,而是通过类型来表示数据结构。类型可以像类一样复杂,甚至更加灵活。你可以根据需要定义自己的类型,比如表示地理坐标的类型。这与Python和R中的数据类型系统有所不同,需要花一些时间来理解和掌握。
适应1-indexed索引
与Python和R的0-indexed索引不同,Julia采用1-indexed索引。这意味着集合中第n个元素的索引是n,而不是n-1。在处理数组等数据结构时,这一点需要特别注意,避免出现索引错误。
Julia环境搭建
安装Julia
二进制安装
如果你使用Windows、Mac OS X、Ubuntu、Fedora/RHEL/CentOS或其他支持包管理的Linux发行版,访问Julia语言的下载页面是获取Julia安装程序或包版本的最简单方法。
包管理器安装
对于*NIX发行版用户,可以使用系统的包管理器来安装Julia。
- Ubuntu:在Ubuntu中,有一个为Julia提供的PPA(个人包归档)。打开终端并运行以下命令:
sudo add-apt-repository ppa:staticfloat/juliareleases
sudo add-apt-repository ppa:staticfloat/julia-deps
sudo apt-get update
sudo apt-get install julia
- Fedora:在Fedora中,运行:
sudo dnf install -y julia
- Arch:在Arch Linux中,从'community'仓库安装:
sudo pacman -S julia
设置IJulia
IJulia是IPython notebook环境在Julia中的实现,现在属于Jupyter项目的一部分。它提供了交互式的笔记本环境,支持将Markdown笔记与可执行代码混合,非常适合进行文学编程。
要安装IJulia,首先需要已安装IPython环境,可以通过Anaconda distribution或下载Python并安装IPython notebook环境来获取。然后按照上述说明安装Julia。
启动Julia,打开终端并输入julia,进入REPL(Read Eval Print Loop):
$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.4.0-dev+2251 (2014-12-23 15:46 UTC)
_/ |\__'_|_|_|\__'_| | master/4814557 (fork: 21 commits, 2 days)
|__/ | i686-linux-gnu
julia>
在REPL中,输入]进入包管理器,然后输入add IJulia命令安装IJulia。安装完成后,可以通过以下方式启动IJulia:
using IJulia
notebook()
或者在新的终端标签中使用:
$ ipython notebook --profile julia
开始使用Julia
认识Julia REPL
Julia的REPL有四种模式,每种模式在提示符中都有指示。
Julia模式
提示符:julia> 在这种模式下,你可以直接与Julia引擎交互。按Return/Enter执行当前行的命令并打印结果。你还可以通过ans变量访问上一次操作的结果。如果不希望Julia打印结果,可以在行尾加上;(分号)。
帮助模式
提示符:help> 通过在一行开头输入?,可以进入帮助模式。输入任何内容都会搜索Julia文档中相关的内容。要退出帮助模式,使用退格键。
Shell模式
提示符:shell> 要执行shell命令,输入;。REPL提示符将变为shell>,你输入的任何内容都将作为shell命令执行。要退出shell模式,使用退格键。
搜索模式
提示符:(reverse-i-search) 按^R(Ctrl+R)可以启动历史记录的反向搜索,包括以前的会话。它会显示与你输入的模式匹配的任何命令。
基本操作
打印输出
使用println函数可以打印对象的字符串表示:
julia> println("Hello, Julia!")
Hello, Julia!
字符串连接
可以使用string()函数来连接字符串:
julia> what = "Hello"
"Hello"
julia> whom = "Julia"
"Julia"
julia> string(what, ", ", whom, "!")
"Hello, Julia!"
Julia还允许在字符串字面量中调用变量,甚至进行数学运算:
julia> "$(what), $(whom)!"
"Hello, Julia!"
julia> "2 plus 2 is $(2+2)."
"2 plus 2 is 4."
运行Julia程序
要运行Julia程序,有两种选择:在另一个程序或REPL中包含它,或者在命令行中指定它作为位置参数。
创建一个名为hello.jl的文件,输入以下内容:
println("hello world")
在REPL中,可以使用include函数包含该文件:
julia> include("hello.jl")
"Hello, Julia!"
或者在命令行中运行:
$ julia hello.jl
"Hello, Julia!"
你还可以在文件开头使用shebang注释使其可执行:
#!/usr/bin/env julia
println("Hello, Julia!")
然后通过./hello.jl在命令行中执行(需要确保文件具有可执行权限)。
从Python/R迁移的实用技巧
语法差异对比
| 操作 | Python | R | Julia |
|---|---|---|---|
| 数组追加元素 | array.append(x) |
c(array, x) |
push!(array, x) |
| 注释 | # 注释内容 |
# 注释内容 |
# 注释内容 |
| 函数定义 | def func(x): |
func <- function(x) { } |
function func(x) |
利用现有知识
如果你熟悉Python的IPython notebook,那么IJulia对你来说会非常容易上手。CoLaboratory是IPython团队的成果,它基于IPython的经验和成功,旨在为R和Julia在云端创建类似的体验。CoLaboratory基于Chrome应用和Google Docs,使用后者作为存储平台,是进行结对编程和共同探索Python、R或Julia的好工具。
选择合适的开发工具
Julia有多种开发工具可供选择,你可以根据自己的喜好和需求进行选择:
- Vim:julia-vim
- Emacs:通过Emacs Speaks Statistics(ESS)的相关包提供Julia高亮显示
- Textmate:Julia TextMate Bundle,包括语法支持和一些基本的 bundle 功能
- Sublime Text:Sublime-IJulia将IJulia集成到Sublime Text中
- Notepad++:语法高亮可用
- Light Table:通过Juno支持Julia并提供更多IDE-like功能
总结
从Python/R迁移到Julia是一个充满挑战但回报丰厚的过程。Julia结合了Python的易用性和C的速度,同时吸收了R在统计计算方面的优势。通过本教程,你已经了解了Julia的基本概念、环境搭建和从Python/R迁移的关键要点。现在,你可以开始探索Julia的更多功能,利用它来解决你的技术计算问题。
要获取更多关于Julia的学习资源,可以参考项目中的章节文件,如_chapters/03-ex0.md和_chapters/04-ex1.md等,它们提供了更详细的Julia学习内容。
开始你的Julia之旅吧,相信你会很快爱上这门强大的语言!
更多推荐
所有评论(0)