「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

Juliaを基礎からゆっくりと(その11/X)

 \mathrm{R}\mathrm{Python}\mathrm{C}言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としての\mathrm{Julia}を学んでいく。

3. Juliaライブラリの使い方

3.1 線形代数

 \mathrm{Julia}には線形代数の各種計算を行う\mathrm{LinearAlgebra}モジュールがある。ここではこのモジュールの使い方を扱う。

3.1.1 ベクトルへの基礎演算
using LinearAlgebra

################################
### ベクトルの基礎演算の一部 ###
################################

# 内積
inner_prod = dot([1,2,3],[4,5,6]) 
println(inner_prod)

# 外積
cross_prod = cross([1,2,3],[4,5,6])
println(cross_prod)

v = [1, 2, 3]

# L1ノルム
norm_L1 = norm(v,1)
println(norm_L1)

# L2ノルム
norm_L2 = norm(v,2)
println(norm_L2)

# L∞ノルム
norm_L_Inf = norm(v, Inf)
println(norm_L_Inf)

# L1ノルムによる規格化
v_L1_standardized = normalize(v, 1)
println(v_L1_standardized)

# L2ノルムによる規格化
v_L2_standardized = normalize(v, 2)
println(v_L2_standardized)
3.1.2 行列演算
using LinearAlgebra

# 行列演算
A = [1 2 3; 4 1 6; 7 8 1]
println(A)

tr_A = tr(A)
println(tr_A)

det_A = det(A)
println(det_A)

inv_A = inv(A)
3.1.3 行列の種類

 \mathrm{Julia}には特殊な形の行列専用の型が用意されている。

   
概要
   
\mathrm{Symmetric}
対称行列
   
\mathrm{Hermitian}
\mathrm{Hermite}行列
   
\mathrm{UpperTriangular}
上三角行列
   
\mathrm{LowerTriangular}
下三角行列
   
\mathrm{Tridiagonal}
三重対角行列
   
\mathrm{SymTridiagonal}
対称三重対角行列
   
\mathrm{Bidiagonal}
二重対角行列
   
\mathrm{Diagonal}
対角行列
##################
### 行列の種類 ###
##################

using LinearAlgebra

A = rand(3,3)

# 1. 対称行列の生成

sym_A_U = Symmetric(A) # 上三角部分が対称に(明示的に引数を指定するならば:U)
sym_A_L = Symmetric(A, :L) # 下三角部分が対称に

println(sym_A_U)
println(sym_A_L)

issymmetric(Symmetric(A)) # 対称行列か否かの診断

###
using LinearAlgebra

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

B = Symmetric(A, :L) # 対称行列
C = Hermitian(A) # Hermite行列
D = UpperTriangular(A) # 上三角行列
E = LowerTriangular(A) # 下三角行列
F = Tridiagonal(A) # 三重対角行列
G = SymTridiagonal(Symmetric(A, :L)) # 対称三重対角行列
H = Diagonal(A) # 二重対角行列
I = Bidiagonal(H, :U) # 対角行列

println(A)
println(B)
println(C)
println(D)
println(E)
println(F)
println(G)
println(H)
println(I)
3.1.4 行列分解
   
関数
概要
   
\mathrm{cholesky}
\mathrm{Cholesky}分解
   
\mathrm{lu}
\mathrm{LU}分解
   
\mathrm{qr}
\mathrm{QR}分解
   
\mathrm{hessenberg}
\mathrm{Hessenberg}分解
   
\mathrm{eigen}
スペクトル分解
   
\mathrm{svd}
using LinearAlgebra

A = rand(Float64, 4, 3)

F = svd(A) # 特異値分解

println(typeof(F))

# F.と入力してから<Tab>キーを押すと引数候補が表示される
F.S

println(F.S)
println(F.U)
println(F.V)
println(F.Vt)
3.1.5 BLAS

 \mathrm{BLAS}(basic linear algebra subprogrammes)は線形代数の演算に関する標準的な\mathrm{API}規格である。\mathrm{Julia}では、\mathrm{LinearAlgebra}.\mathrm{BLAS}モジュールの\mathrm{BLAS}ラッパーを提供している。

プライバシーポリシー お問い合わせ