Julia编程01:介绍Julia语言

<生信交流与合作请关注公众号@生信探索>

在2020上半年,因为疫情无法返校,所以在家待了半年,期间学习一点了R语言、Python、Julia、linux和C语言,只是学习基础语法并没有项目练习,因此返校半年后差不多都不记得了,现在重新捡起Julia丰富下当时写的笔记发到公众号来。

Julia编程01:介绍Julia语言_第1张图片

语言特点

前三门语言很类似,是可以一起学的,julia像是处于动态语言向静态语言过度的语言,既可以指定类型又可以不指定,优点就是速度极快,缺点就是造好的轮子不多。

Julia的设计者想把她设计成完美的语言...

Julia要像C语言一般快速而又拥有如同Ruby的动态性;要具有Lisp般真正的同像性(Homoiconicity)而又有Matlab般熟悉的数学记号;要像Python般通用、像R般在统计分析上得心应手、像Perl般自然地处理字符串、像Matlab般具有强大的线性代数运算能力、像shell般胶水语言的能力,易于学习而又不让真正的黑客感到无聊;还有,它应该是交互式的,同时又是编译型的……

官网的Benchmarks

https://julialang.org/benchmarks/

Julia编程01:介绍Julia语言_第2张图片

我也跑个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

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

本文由 mdnice 多平台发布

你可能感兴趣的:(程序人生)