快速入门一门新的编程语言的关键是你已经熟练掌握了一门编程语言。这样子,当你遇到一门新的编程语言,你就不会因为它详细的文档而感到不安,而是可以根据自己的需要径直去查找内容。
Julia的特点是什么呢?根据它的文档,它是一门动态面向对象的编程语言,能够交互式进行数据探索,并且它基于LLVM实现的JIT使得它的性能可以媲美C语言。
软件安装
在国内的USTC镜像站点上, https://mirrors.ustc.edu.cn/julia/releases/ 根据自己的操作系统下载合适的版本。
基本入门
国内翻译了软件1.1版本的文档,见https://docs.juliacn.com/latest/
我目前只能使用MacOS,需要运行下面这一行来进入交互命令行
exec '/Applications/Julia-1.3.app/Contents/Resources/julia/bin/julia'
并且我非常顺利的运行了第一条命令,也就是hello world.
hello world
不需要学习任何的Julia知识,根据你对R语言和Python理解,你就知道如何在Julia进行数值运算,以及变量创建。
julia> 100 + 200
300
julia> 300 / 200
1.5
julia> a = "hello world"
"hello world"
julia> a = 2
2
julia> b = 3
3
julia> a+b
5
我还瞎猜了它的数据结构和一些基本函数
julia> a= [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> sum(a)
6
这里的a说明它是一个Array数据结构,存放了三个Int64类型的数据。它和R语言一样,都是以1作为开始下标,而不是0. 但是和R语言不一样的是,他不能做a+1这种操作,这方面和Python的Numpy一样,支持下面的运算。
a = [1,2,3]
b = [4,5,6]
a + b
Julia的函数写法有两种,一种和数学公式一样优雅
julia> f(x,y) = x+ y
# 支持Unicode编码
julia> 武汉() = print("加油!")
武汉 (generic function with 1 method)
julia> 武汉()
加油!
如果需要写出复杂的递归代码,就需要用到第二种写法
> function fib(x)
if (x == 0) return 1
end
if ( x<=2) return x
end
return fib(x-1) +fib(x-2)
end
上面就是一个递归形式的斐波那契计算函数。
当然为了写出复杂的函数,必须借助于条件语句,循环语句。
julia> if x < y
println("x is less than y")
elseif x > y
println("x is greater than y")
else
println("x is equal to y")
end
julia> for i in [1,4,0]
println(i)
end
你会发现Julia的条件语句和循环语句和Python的很类似,除了你得在最后加一个end,表示结束(这让我想起了shell脚本)
数据读写和扩展安装
其实我认为如何读取数据是更加重要的内容,如果不能把自己的数据加载到程序中,那么学会上面这些操作就好比学了屠龙技,却发现没有龙。
这一点R语言比较好,知道你需要读取csv或者txt, 直接给你提供了read.table这个函数,读取之后就是数据框,就跟打开Excel一样。当然这也是R语言的问题,如果你第一门编程语言是R语言,那么你可能会忽略掉读取过程中数据流缓冲和类型判断。
但是Julia并不是原生就带着这些函数的,你需要自己额外安装一些包(就如同Python要装Numpy和Pandas一样)
# 安装包
using Pkg
Pkg.add("CSV")
Pkg.add("DataFrames")
之后的操作,如何你学过Python的Pandas,那么你可以无缝衔接
# 加载包
using CSV
using DataFrames
df =DataFrame(CSV.File("input.csv"))
# 或是试试管道的语法
df = CSV.file("input.csv") |> DataFrame!
常规的数据切片
df[1,:] #第一行
df[:, 1] #第一列
参考对应文档了解更多内容
- https://juliadata.github.io/DataFrames.jl/stable/
- https://juliadata.github.io/CSV.jl/stable/
画图
R语言有ggplot2生态系统,Python里有Matplotlib为基础的绘图体系。
Julia则是Plot.jl
Pkg.add("Plots")
感受下一个官方提供的代码
using Plots
## 结构体
mutable struct Lorenz
dt; σ; ρ; β; x; y; z
end
## 赋值
attractor = Lorenz((dt = 0.02, σ = 10., ρ = 28., β = 8//3, x = 1., y = 1., z = 1.)...)
## 创建数据集
function step!(l::Lorenz)
dx = l.σ*(l.y - l.x) ; l.x += l.dt * dx
dy = l.x*(l.ρ - l.z) - l.y ; l.y += l.dt * dy
dz = l.x*l.y - l.β*l.z ; l.z += l.dt * dz
end
# initialize a 3D plot with 1 empty series
plt = plot3d(1, xlim=(-25,25), ylim=(-25,25), zlim=(0,50),
title = "Lorenz Attractor", marker = 2)
# build an animated gif by pushing new points to the plot, saving every 10th frame
@gif for i=1:1500
step!(attractor)
push!(plt, attractor.x, attractor.y, attractor.z)
end every 10
当然了,上面这个图我肯定画不出来,我们可以画画R语言的鸢尾花数据集
Pkg.add("StatsPlots")
# load a dataset
using RDatasets
iris = dataset("datasets", "iris");
# load the StatsPlots recipes (for DataFrames) available via:
using StatsPlots
# Scatter plot with some custom settings
@df iris scatter(:SepalLength, :SepalWidth, group=:Species,
title = "My awesome plot",
xlabel = "Length", ylabel = "Width",
m=(0.5, [:cross :hex :star7], 12),
bg=RGB(.2,.2,.2))
# save a png
png("iris")
对应文档:
- https://github.com/JuliaPlots/Plots.jl
Julia是一门不断发展的新兴编程语言,在2年前,当你用百度搜索的时候,我都怀疑百度在开车。现在,搜索的第一条终于是Julia的主站,并且也有了中文站,还有了较为不错的生态。
虽然它的性能不错,但大部分人都是面向调用编程,所以还是老老实实用我的R语言吧。