Julia触ってみた
JUliaって?
Juliaは、汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語、及び動的プログラミング言語である。
基本的な構文
import文
#python
import hoge
from hoge import *
#julia
import hoge
using hoge
変数宣言
#python
hoge = 10
#julia
hoge = 10
hoge = 1 + 2im # 1 + 2im = 1 +2i
hoge :: Int = 10
Juliaは静的型付けもできて、複素数も標準搭載。
標準出力
#python
print("Hello World")
#julia
println("Hello World") #改行あり
print("Hello World") #改行なし
演算
#python #julia
x = 1 x = 1
y = 1 y = 1
x + y x + y
x - y x - y
x * y x * y
x / y x / y # x \ yでもjuliaは同じ
x // y x ÷ y # %とは別なので注意
x % y x % y
x ** y x ^ y
制御構文
#python
if x < y:
print("x < y")
elif x > y:
print("x > y")
else:
print("x == y")
#julia
if x < y
println("x < y")
elseif x > y
println("x > y")
else:
println("x == y")
end
#三項演算子もある
x > y ? true : false
繰り返し
#python
for i in range(1,4):
print(i)
while(1):
print("hoge")
#julia
for i in 1 : 3 # in を = にして for i = 1 : 3 でも同じ
println(i)
end
while(1)
println("hoge")
end
関数
#python
def hoge(tmp):
print(tmp)
#julia
function hoge(tmp):
println(tmp)
end
function hoge(tmp :: Int)
tmp += 1
end
Juliaは二個目の例のように引数にとる型を指定することができるらしい。
クラス
#python
class hoge:
def __init__(self):
self.tmp = 0
#julia
mutabel struct hoge
tmp
function hoge()
self = new(0)
end
end
Juliaはオブジェクト指向ではないみたい。だからあえて、クラスみたいに書くと上の例のようになる。構造体と同じ名前を関数名にして関数内でnewを呼ぶことでコンストラクタにできる。
Numpy配列
#python
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[1,2],[3,4]])
a * b #[[1,4],[9,16]]
b + 1 # [[2,3],[4,5]]
np.dot(a,b) #[[7,10],[15,22]]
a.shape #(2,2)
a.reshape(4,1) #[[1],[2],[3],[4]]
np.zeors((2,2)) #[[0.,0.],[0.,0.]]
#julia
a = [1 2 ; 3 4]
b = [1 2 ; 3 4]
a .* b #[1 4 ; 9 16]
b .+ 1 #[2 3;4 5]
a * b #[7 10; 15 22]
size(a) #(2,2)
reshape(permutedims(a), (4, 1)) #[1;2;3;4]
zeors((2,2)) #[0.0 0.0 ;0.0 0.0]
最後にNumpy配列について、Juliaの行列に対しての演算は.演算子をつけることで各要素ごとの演算になる。
また、Juliaの行列は列が基準になるためreshape(a,(4,1))と書くと出力は[1;3;2;4]のようになるから注意!
最後に
Juliaにはまだまだ紹介できてない機能がたくさんあるから、みんな各自調べて使ってみてほしい(自動微分、行列の対角化、LU分解、スペクトル分解)。
また、python、cやc++を呼び出したりもできるらしい(知らんけど)。
ためになりました