Julia语言矩阵运算入门

jackwangcumt 发表于 2021/05/16 21:39:22 2021/05/16
【摘要】 Julia 是一门支持过程式、函数式和面向对象的多范式语言。 它像 R、MATLAB 和 Python 一样简单,在高级数值计算方面有丰富的表现力,并且支持通用编程。 为了实现这个目标,Julia 以数学编程语言为基础,同时也参考了不少流行的动态语言。

         在科学计算领域,一直对性能有较高的要求,Julia是一个新的高性能动态高级编程语言,功能强大,语法简洁,易于用户学习。它拥有丰富的函数库,提供了数字精度和分布式并行运行方式。它内部使用Just-in-Time实时编译器很有效地提高了它的运行效率,有些场景下能比得上C和C++。

      根据官网的介绍,Julia 是一门支持过程式、函数式和面向对象的多范式语言。 它像 R、MATLAB 和 Python 一样简单,在高级数值计算方面有丰富的表现力,并且支持通用编程。 为了实现这个目标,Julia 以数学编程语言(mathematical programming languages)为基础,同时也参考了不少流行的动态语言,例如 LispPerlPythonLua、和 Ruby。Julia中文文档可见网站 https://docs.juliacn.com/latest/ 。

     Julia 还拥有以下优势:

  • 采用 MIT 许可证:免费又开源
  • 用户自定义类型的速度与兼容性和内建类型一样好
  • 无需特意编写向量化的代码
  • 为并行计算和分布式计算设计
  • 轻量级协程支持
  • 低调又牛逼的类型系统
  • 优雅、可扩展的类型转换和类型提升
  •  Unicode 的有效支持,包括但不限于 UTF-8
  • 直接调用 C 函数,无需封装或调用特别的 API
  • 像 Shell 一样强大的管理其他进程的能力
  • 像 Lisp 一样的宏和其他元编程工具

下面给出一些Julia处理矩阵的示例,感觉和Matlab很像,示例如下:

julia> a = [ 1 3 5 ; 2 6 8]
2×3 Array{Int64,2}:
 1  3  5
 2  6  8

julia> a[1,:]
3-element Array{Int64,1}:
 1
 3
 5

julia> a[1:2,1]
2-element Array{Int64,1}:
 1
 2

julia> b = a'
3×2 LinearAlgebra.Adjoint{Int64,Array{Int64,2}}:
 1  2
 3  6
 5  8
julia> a = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
3×3 Array{Int64,2}:
 1  2  3
 4  5  6
 7  8  9

julia> a * a
3×3 Array{Int64,2}:
  30   36   42
  66   81   96
 102  126  150

julia> a ^ 2
3×3 Array{Int64,2}:
  30   36   42
  66   81   96
 102  126  150

julia> a .^ 2
3×3 Array{Int64,2}:
  1   4   9
 16  25  36
 49  64  81

注意:矩阵运算这里的  .^2  和 ^2 的区别。

 Julia 有一个用于表示整数精确比值的分数类型。分数通过 // 运算符,示例如下:

julia> inv(2//3)
3//2

julia> pi
π = 3.1415926535897...

julia> (3 // 5) * (2 // 3)
2//5

julia> rationalize(0.5)
1//2

julia> denominator(2//3)
3

julia>  numerator(2//3)
2

 Julia还支持约等于 ≈,示例如下:

julia> 0.1 ≈ (0.1 - 1e-10)
true
julia> function f(x,y)
           x^2+2x*y+y^2
       end
f (generic function with 1 method)

julia> f(2,3)
25

julia> 1:5 |> sum |> sqrt
3.872983346207417

julia> ["a", "list", "of", "strings"] .|> [uppercase, reverse, titlecase, length]
4-element Array{Any,1}:
  "A"
  "tsil"
  "Of"
 7

julia> a = [2 4 8]
1×3 Array{Int64,2}:
 2  4  8

julia> sqrt.(a)
1×3 Array{Float64,2}:
 1.41421  2.0  2.82843
julia> println(factorial(big(15)))
1307674368000

julia> println(factorial(big(1000)))
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

关于Julia的其他语法还有比较多,这里先介绍到这里,后期再进行介绍。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。