在2020上半年,因为疫情无法返校,所以在家待了半年,期间学习一点了R语言、Python、Julia、linux和C语言,只是学习基础语法并没有项目练习,因此返校半年后差不多都不记得了,现在重新捡起Julia丰富下当时写的笔记发到公众号来。
语言特点
前三门语言很类似,是可以一起学的,julia像是处于动态语言向静态语言过度的语言,既可以指定类型又可以不指定,优点就是速度极快,缺点就是造好的轮子不多。
Julia的设计者想把她设计成完美的语言...
Julia要像C语言一般快速而又拥有如同Ruby的动态性;要具有Lisp般真正的同像性(Homoiconicity)而又有Matlab般熟悉的数学记号;要像Python般通用、像R般在统计分析上得心应手、像Perl般自然地处理字符串、像Matlab般具有强大的线性代数运算能力、像shell般胶水语言的能力,易于学习而又不让真正的黑客感到无聊;还有,它应该是交互式的,同时又是编译型的……
官网的Benchmarks
https://julialang.org/benchmarks/
我也跑个Benchmarks
在学习函数的时候,无论是Python、R、Jula都会讲到递归,并用斐波那契数列作为例子。这里的Benchmarks使用的递归为最原始版的,没有为了使其速度更快,而写很复杂的代码或用精巧的设计。
参考https://zhuanlan.zhihu.com/p/585529899的代码,他所用的数字是n=40,但是我用julia算第40个斐波那契数只用了0.2s,感觉不太对,所以用了n=50,导致R和Python计算不出来,所以又折中算了n=45的情况。
n=40 | n=45 | n=50 | |
---|---|---|---|
R | 37.1 | 409.1 | Inf |
Python | 11.3 | 125.1 | float('inf') |
Julia | 0.2 | 2.6 | 29.6 |
注:单位为秒
- 首先是R语言版的斐波那契数列
fib <- function(n) {
if (n <= 2) {
return(1)
}
return(fib(n - 1) fib(n - 2))
}
- Python版的斐波那契数列
def fib(n):
if n <= 2:
return 1
return fib(n-1) fib(n-2)
- Julia版的斐波那契数列
function fib(n::Int)
if n <= 2
return 1
end
return fib(n - 1) fib(n - 2)
end
- 测试设备
OS: macOS (arm64-apple-darwin21.5.0)
CPU: 8 × Apple M2
WORD_SIZE: 64
R version: 4.2.2
Python version: 3.10.10
Julia version: 1.8.5
Reference
代码语言:text复制https://baike.baidu.com/item/Julia/10423675
https://cn.julialang.org/
https://julialang.org/benchmarks/
https://github.com/Yiguan/benchmark_C_Julia_Py_R
https://zhuanlan.zhihu.com/p/585529899