天天看點

Julia語言矩陣運算入門

         在科學計算領域,一直對性能有較高的要求,Julia是一個新的高性能動态進階程式設計語言,功能強大,文法簡潔,易于使用者學習。它擁有豐富的函數庫,提供了數字精度和分布式并行運作方式。它内部使用Just-in-Time實時編譯器很有效地提高了它的運作效率,有些場景下能比得上C和C++。

      根據官網的介紹,Julia 是一門支援過程式、函數式和面向對象的多範式語言。 它像 R、MATLAB 和 Python 一樣簡單,在進階數值計算方面有豐富的表現力,并且支援通用程式設計。 為了實作這個目标,Julia 以數學程式設計語言(mathematical programming languages)為基礎,同時也參考了不少流行的動态語言,例如 Lisp、Perl、Python、Lua、和 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