ãã®ããæä»£ã¯Juliaã ãïŒ
- 2020.02.02
- ããã°ã©ãã³ã°
- Julia, Python, Ruby, Rèšèª

ç¥ãããã©ã
ã¯ããã«
æ¬åœã«ãã£ãšèª¬æããã ãã§ãã
ã§ãã®ã§æŽå²çèæ¯ãç¥ãããã£ããå¿çšäŸãç¥ããã人ã«ã¯ç©è¶³ããªããããããŸããããã®å Žåã¯Wikipediaã«ãããŸãã
Juliaãèªã¿æ¹ã¯ããžã¥ãªã¢ãã§ãã®ãŸãŸã§ãã
ãããžã¥ããªã£ããªã®ãããžã¥ããªã¢ãããªã®ãããžã¥ããªãã¢ããªã®ãã¯ç¥ããªããã©ç§ã®å Žåã察æ¥çžæã«ã¯2çªç®ã察å€çžæã«ã¯1çªç®ã§èª¬æããŸãã
å人ããJuliaãã§ã°ã°ã£ãŠã¿ãçµæã§ã¯ã»ã¯ã·ãŒå¥³åªãåºããããã§ãããç§ãæ€çŽ¢ããŠããããªã®åºãŠããªãã£ãïŒã©ã¡ãã倿 æ§ã«å¯ãã§ããã®ããšããè°è«ã¯ããªãïŒ
ããããåãããªãã£ããã°ã°ãã°è¯ããããïŒPython3ã§èšã£ããæåã¯äœ¿ããªããŠãéçºãããã§ãããã³ã¬ãŒã¿ãŒãšããžã§ãã¬ãŒã¿ãŒãšãïŒããšããéšåã¯é©å®ã端æããŸãã
ãã®ããŒãžã®ã¿ãŒã²ãã
æäœéãããããã¯ã§ãã人ãã¿ãŒã²ãããšããŠããŸãã
- Python3ãããã¯Rèšèªããªããšãªãã§ãè¯ãããæžãã
- ãªããžã§ã¯ãæåããªããšãªãã§ãè¯ãããç¥ã£ãŠããããã䜿ã
- ç°å¢éçºãå«ã
- åãããªãã£ããèªåã§ã°ã°ã£ããã§ãã
ãJuliaãšãèšãPython3ãããå®è¡é床ãéãæ©æ¢°åŠç¿ãããŠã¿ããããšãã人ã¯ãªãè¯ãã§ããããJuliaã§æ©æ¢°åŠç¿ãäœ¿ãæ¹æ³ã«ã€ããŠã¯ã°ã°ã£ãŠäžããããããŸã§ãã®ããŒãžã¯ã»ãã®è§ŠãçšåºŠãªã®ã§ã
ãã®ããŒãžã§ã¯äž»ã«Python3ãšæ¯èŒããŠèª¬æããŸããRèšèªãŠãŒã¶ãŒã®æ¹ãã¡ããã¿ãŸããã
ãã®ããŒãžãã¿ãŒã²ãããšããŠããªã人ãã¡
æžããšãã¹ãã§ãããã
- ããã°ã©ãã³ã°å ¥éè
- Python3ã§æ«æãã人
ãã®æ°ã«ãªãã°ããã°ã©ãã³ã°å ¥éè çšã®Julia玹ä»ããŒãžãäœãããïŒPython3ã»ã©åèæžãå€ãããã§ã¯ãªãããïŒ
ç§ã®ç°å¢
ãããªæãïŒ2020幎1æ31æ¥çŸåšïŒ
- macOS Catalina 10.15
- MacBook Air (13-inch, 2017)
- Julia Version 1.3.1
WindowsãŠãŒã¶ãŒãä»ã®UNIXç³»ãŠãŒã¶ãŒã®æ¹ãã¡ã¯ããã®éœåºŠã°ã°ã£ãŠäžããã
ãŸãç§ã¯vimã°ããã䜿ã£ãŠãã人ãªã®ã§ïŒæ£ç¢ºã«ã¯neovimãªãã ããã©ïŒãJupyter Notebookã䜿ã£ãŠã®èª¬æã¯ããŸããããJupyter Notebookã䜿ããããªãããšãã人ã¯ããã®Qiitaã«ãããŸãã
ç°å¢èšå®
è³ã£ãŠã·ã³ãã«ãQiitaã«ãã£ãã
$ brew cask install julia
...
ðº julia was successfully installed!ãšãããããã衚瀺ããããã以äžã®ã³ãã³ããå®è¡ããŠã¿ãŸãããã
$ juliaãããšãã衚瀺ãããã¯ãã§ãã
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.3.1 (2019-12-30)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia> ãã£ãšã«ã©ãã«ã«è¡šç€ºãããŸãã
ãæ¬åœã«ããã ãïŒããšæãããšã§ãããã
æ¬åœã«ããã ãã§ãïŒä»ã®ãšãããšã©ãŒå ±åã¯èããŠãªãïŒ
Python3ã®ãšãã«ãã¹ãéãããããªããŠãè¯ãã®ã¯éåžžã«å¥œéœåã
äžå¿Juliaã¯ãã®ããã«ã³ã³ãã€ã«èšèªãªã®ã§ïŒã ããå®è¡é床ãéãããã ãã³ã³ãã€ã«ã«ã¯æéããããïŒãã€ã³ã¿ãŒããªã¿ãŒãšèšã£ãŠè¯ãã®ãã¯ããããŸããããããã£ãœããã®ãæäŸãããŠããŸãã
æŒç®å
åèæžãšãã ãšæåã®ã»ãã«REPLãšãæžããŠãããã®ãå€ãã§ããããšããããé£ã°ããŸãã
ãREPLïŒãäœããçŸå³ããã®ïŒããšèãããšæããŸããããããã®ãããçšåºŠã«èããšããŠãã ããã
ç®è¡æŒç®
ãšããããã³ãŒããæžããŠã¿ãŸãããã
# println颿°ã§çµæãåºåãã#ãã§ã³ã¡ã³ãã§ãã
# æååã¯ã"ãã§å²ããã'ãã䜿ããªãããäžäŸ¿
# ã,ãã§åãããããã空çœã¯å
¥ããªã
println("Hello", "World!")
println("==== ç®è¡æŒç® ====")
x = -3 # 代å
¥
y = 5
println("+x = ", +x)
println("-x = ", -x)
println("x + y = ", x + y)
println("x - y = ", x - y)
println("x * y = ", x * y)
println("x / y = ", x / y)
println("div(x, y) = ", div(x, y)) # ÷ ã䜿ãããã©REPLã§èª¬æãã
println("x ^ y = ", x ^ y)
println("x % y = ", x % y)
println("==== ãããæŒç® ====")
println("~x = ", ~x)
println("x & y = ", x & y)
println("x | y = ", x | y)
println("x >>> y = ", x >>> y) # è«çå³ã·ãã æäžäœæ¡ã®å€ã¯0ã«ãªã
println("x >> y = ", x >> y) # ç®è¡å³ã·ãã æäžäœæ¡ã®å€ã¯1ã«ãªã
println("x << y = ", x << y)
# è€å代å
¥æŒç®å += ãªã©ã¯çç¥
println("==== ããŒã«æŒç® ====")
a = false # true ã false ã¯å°æå
b = true
println("!a = ", !a)
println("a & b = ", a & b)
println("a | b = ", a | b)
println("xor(a, b) = ", xor(a, b)) # â» ã䜿ãããã©REPLã§èª¬æãã
println("x == y = ", x == y)
println("x != y = ", x != y)
println("x < y = ", x < y)
println("x <= y = ", x <= y)
println("x > y = ", x > y)
println("x >= y = ", x >= y)
z = 8
println("x < y < z = ", x < y < z)å®è¡ãããšãããªæã
$ julia sample.jl
HelloWorld!
==== ç®è¡æŒç® ====
+x = -3
-x = 3
x + y = 2
x - y = -8
x * y = -15
x / y = -0.6
div(x, y) = 0
x ^ y = -243
x % y = -3
==== ãããæŒç® ====
~x = 2
x & y = 5
x | y = -3
x >>> y = 576460752303423487
x >> y = -1
x << y = -96
==== ããŒã«æŒç® ====
!a = true
a & b = false
a | b = true
xor(a, b) = true
x == y = false
x != y = true
x < y = true
x <= y = true
x > y = false
x >= y = false
x < y < z = trueæ¬åœã¯ã\ïŒããã¯ã¹ã©ãã·ã¥ïŒæŒç®åãããããšããããã©ã詳ããç¥ãããã£ããã°ã°ã£ãŠãã ããã
if for whileãªã©
ã¡ãããšçšæãããŠããŸãã
ã³ãŒãäŸã¯ãããªæãã
println("==== for i in 5 ====")
for i in 5
println(i)
end
# Ruby ã£ãœã end ãæžã
#= Python3 ã ãš range(1, 5+1)
ãããRèšèªã«è¿ãæžãæ¹
ããããã°ã³ã¡ã³ãã¢ãŠãã¯ã#=ããšã=#ãã§å²ãæ¹æ³ããããã
C/C++ã®ã/* /* comment */ error */ããšã¯éã£ãŠå€éã§å²ãã§ããšã©ãŒãèµ·ãããªã
=#
println("==== for i in 1:5 ====")
for i in 1:5
println(i)
end
# Python3 ã ãš range(1, 5+1, 2)
println("==== for i in 1:2:5 ====")
for i in 1:2:5
println(i)
end
# in 㯠â ãšãããæåã§ä»£çšã§ãããREPLã§èª¬æãã
for obj in ["Hello", '%', 789]
println(obj)
end
i = 5
while true
global i -= 1
if i == 0
break
# else if 㯠elif ã§ã elsif ã§ããªã
elseif i % 2 == 1
println("$i is an odd number.") # $i ã§ i ã®çµæãåºåã§ãããPython3 ãªã f'{i} is an odd number.'
else
println("$i is an even number.")
end
end
x, y = 3, 5 # ãã®ããã«ããŠãããããã®å€æ°ã«æ°å€ã代å
¥ããã
# äžé
æŒç®å
println("x == y ? 'y' : 'n' = ", x == y ? 'y' : 'n')ã§çµæã
==== for i in 5 ====
5
==== for i in 1:5 ====
1
2
3
4
5
==== for i in 1:2:5 ====
1
3
5
Hello
%
789
4 is an even number.
3 is an odd number.
2 is an even number.
1 is an odd number.
x == y ? 'y' : 'n' = n
Goãšã¯éã£ãŠwhileã¯ãããŸãïŒç§çã«whileã¯ãããªããšæããã©ãã³ã³ãã¥ãŒã¿ãŒãè§£éããããããã«æ®ããŠãããã ãšæãïŒ
try catchã¯åŸã»ã©ïŒç§ã®ã»ãã§ã¯ããŸã説æããŠããªããã©ïŒ
å
æŒç®åã®ç« ã«ãããŠãx >>> yã®çµæãèŠãŠã¿ããšããããŸããããªãŒããŒãããŒããŠãŸãã
å®ã¯äžè¬çãªæŽæ°åã¯Int64åã§å®£èšãããŠããããããã®ãããªåé¡ãçºçããŸãã
ãã倧ããªæ°ã䜿ãããå Žåã¯ãBigIntåã䜿ãããšã«ãªããŸãã
以äžããã°ã©ã ãšå®è¡äŸã
for mio_obj in [
"hogehoge", '@', 'çŽ',
3, -1,
2.88, pi, exp, 3 // 12, 0o755, 0xff,
1e5, 10 ^ 20, BigInt(10) ^ 20, 3 + 4im,
true, NaN,
5:8, println, Int8, stderr
]
println(mio_obj, " is type of ", typeof(mio_obj))
endhogehoge is type of String
@ is type of Char
çŽ is type of Char
3 is type of Int64
-1 is type of Int64
2.88 is type of Float64
Ï is type of Irrational{:Ï}
exp is type of typeof(exp)
1//4 is type of Rational{Int64}
493 is type of UInt16
255 is type of UInt8
100000.0 is type of Float64
7766279631452241920 is type of Int64
100000000000000000000 is type of BigInt
3 + 4im is type of Complex{Int64}
true is type of Bool
NaN is type of Float64
5:8 is type of UnitRange{Int64}
println is type of typeof(println)
Int8 is type of DataType
is type of Base.TTYæååæäœ
ããã蟺ã¯Python3ãšRèšèªäž¡æ¹ã®èŠçŽ ãããããããªæ°ãããã
ãšããããã
mio_obj = "fugahoge"
println(mio_obj)
println("length $(length(mio_obj))")
println(mio_obj[1]) # index 㯠1 ããå§ãŸããããã¯Rèšèªã£ãœã
println(mio_obj[2:6]) # ã¹ã©ã€ã·ã³ã°ãã§ããããã㯠Python3 ã£ãœããPython3 ãªã mio_obj[1:6]
println(mio_obj[:5]) # Pythonista ã«ãšã£ãŠæã£ããããªæåãããŠãããªãã¹ã©ã€ã·ã³ã°
# mio_obj[5:] ãšããã§ããªã
println(mio_obj[end]) # ç¹æ®ãªæå³ãæã€ endãPython3 ãªã mio_obj[-1]
println(mio_obj[end-2:end]) # Python3 ãªã mio_obj[-2:]
println(mio_obj[1:2:5]) # Python3 ãªã mio_obj[0:5:2]
mio_obj = "ããäžãæ¿ã¯ã±ã³"
println(mio_obj)
println("length $(length(mio_obj))") # æååã®é·ãã¯ã¡ãããšåããã®ã«
println(mio_obj[(1*3)-2:(5*3)+1]) # Unicode æå㯠mio_obj[1:2] ã®ããã«ã§ããªããããããã©ããã
mio_obj = "ð«ð¯"
println("$(mio_obj[1]) $(mio_obj[5])") # Emoji ã¯ãŸãå¥ã®æåããã
println("æååã®" * "è¶³ãç®") # ã.ãã§ãã+ãã§ããªãåºåçµæã
fugahoge
length 8
f
ugaho
h
e
oge
fgh
ããäžãæ¿ã¯ã±ã³
length 8
ããäžãæ¿ã¯
ð« ð¯èŠã¯ãUnicodeæåã䜿ã£ãéçºãšãããªãããïŒããšããããšãèšããããããïŒæ¢ãã°ããã±ãŒãžããããŸãïŒ
using Pkg
Python3ã§ãããšããã®pipãšimportãåããããããªãã®ãRèšèªã§ãããšããã®requireãšlibraryãåããããããªãã®ã§ãã
ãšãããããã€ã³ã¿ãŒããªã¿ãŒçãªã¢ãŒãã«ç§»ããŸããã¿ãŒããã«ã§juliaãå®è¡ã
ãŸããIJuliaã§ãå ¥ããŠã¿ãŸãããã
$ julia
...
julia> using Pkg
julia> Pkg.add("IJulia") # 次åããäžèŠ
...
julia> using IJulia
julia> IJulia.notebook()ãããã±ãŒãžã®æŽæ°ããããŠãããã©ãã確èªãããïŒããšããã€ã³ã¹ããŒã«ããŠãããã©ããåãããªãããšãå°ã£ãããã»ãšãã©ãã®Qittaã«æžããŠããã
Jupyter Notebookã䜿ã£ãŠãç§ã¯ãªããšãèšããŸããããJupyter Notebookèªäœã¯Python3ã§åäœããŠããã®ã§ãJuliaã®æ©æµãåãããããã©ãããšããã®ã¯ä¿èšŒããŸããã
REPL
IJuliaã説æãã¡ãã£ãããã€ãã«æžããã
ãã£ãããã³ãŒãäŸãšãã§REPLãREPLãšèšã£ãŠãããã©ããæ£çŽäœïŒããšæã£ã人ã¯ãããšæããŸãã
ãŸãã¯å ã»ã©ã®æé ã«åŸã£ãŠãIJuliaãéããŠã¿ãŸãããã
äžã®ç»åã®æé ã§é²ããŸãããã



ããã§éãããšæããŸãã
ãšããããHelloããŸãããã

å®è¡ã¯ãShift+Return(Enter)ãã§ã§ããŸãã
ã¡ãããšã§ããŸãããã
ã§ã¯æ¬é¡ã
ãŸãããæã¡ãŸãã

次ã«\piã®æ«å°Ÿã«ã«ãŒãœã«ãåãããç¶æ
ã§ãTabããæŒããŸãã
âŠâŠã
ã©ããªããŸãããïŒ

ãããªããŸããïŒ
ããã§ããã®ãªã·ã£æåãÏããåºåããããšæããŸãã
ãããå®è¡ããŠã¿ããšãããªãã¯ãã§ãã

ã¡ãããšååšçã«ãªã£ãŠãã
ããããpiãå®è¡ã§ããŸãããxorã¯èŠæ ããæªããªãããããããããªãã
ãããREPLã§ãã
ããªãã«ããã¬ãã«ããã¬ããã«ããã¢ãŒãªãŒããŒãšã«ããšãããããçºé³ãããŸããããŸãéããã°ãªãã§ãè¯ããšæããŸãã
ä»ã«ãããããããããåèã«ããã


èŸæžã»ã¿ãã«ã»ãã³ãœã«
ããã¯RèšèªãPythonã®NumPyãšPandasã«è¿ããšæãã
ãšããããããŸãã¯é åãèŸæžãã¿ãã«ãã»ããã®å®£èšã®æ¹æ³ã
arr = ["Uovo", "Casa", "Spaghettini"]
println("$arr $(typeof(arr))")
dic = Dict("une" => 1, "deux" => 2, "trois" => 3)
println("$dic $(typeof(dic))")
tup = (5, 0, 0, 7, 3, 1)
println("$tup $(typeof(tup))")
stt = Set(arr)
println("$stt $(typeof(stt))")åºåçµæã
["Uovo", "Casa", "Spaghettini"] Array{String,1}
Dict("deux" => 2,"une" => 1,"trois" => 3) Dict{String,Int64}
(5, 0, 0, 7, 3, 1) NTuple{6,Int64}
Set(["Casa", "Uovo", "Spaghettini"]) Set{String}次ã¯ãã³ãœã«ããã¯ãã«ïŒæ£ç¢ºã«ã¯èŠçŽ ãæ°å€ã®é åïŒ
matA = [1 2;
4 3]
matB = [5 2;
3 2]
# matA, matB 㯠R^{2*2} ã®è¡åã宣èšãããããã§ã¯ïŒ
intC = 5
vecL = [2, 6] # [] å
ã§ã,ãåºåãã«ãããšãã¯ãã«ã«ãªã
# matL = [2 6] # ãã®å Žå㯠R^{1*2} ã®è¡åãšããæ±ã
println("matA + matB = ", matA + matB)
println("matA * matB = ", matA * matB) # è¡åã®å®çŸ©ã«æ²¿ããæãç®ãNumPy1.18 ã®ã@ãã«çžåœ
println("matA .* matB = ", matA .* matB) # èŠçŽ ããšã®æãç®ã«ã¯ã.*ãã䜿ããNumPy1.18 ã®ã*ãã«çžåœãã.ãã«ã€ããŠã¯æ¬¡ç« ãåè
println("matA .+ intC = ", matA .+ intC) # è¡å + ã¹ã«ã©ãŒãããã«é¢ããŠã次ç«
println("matA * vecL = ", matA * vecL)
println("matA' = ", matA') # 転眮ã¯ã'ãã§è¡šããtranspose(matA) ãšãçµæã
matA + matB = [6 4; 7 5]
matA * matB = [11 6; 29 14]
matA .* matB = [5 4; 12 6]
matA .+ intC = [6 7; 9 8]
matA * vecL = [14, 26]
matA' = [1 4; 2 3]èŠæ ããè¯ãâŠâŠã
ããšããšJuliaã¯è²ªæ¬²ãªäººãã¡ãäœã£ãèšèªã§ãMATLABã®ããã«æ°åŒããèšè¿°åŒã飿³ããããããã«èšèšãããŠããããããããªã«è¡åããã¯ãã«ã宣èšããããããã«ãªã£ãŠããŸãã
転眮ã¯ã’ãã§è¡šããã§ãããè§£æç³»ã®äººã«ãšã£ãŠã¯éŠŽæã¿ããªããããããŸããããçµ±èšç³»ã®äººã«ãšã£ãŠã¯éŠŽæã¿ãããèšå·ã ãšæããŸãã
é¶è¡åãšãåºæå€åè§£ãšãããã£ãšæçšãªé¢æ°ã¯ãããŸããããããªã®èª¿ã¹ãã°åºãŠããã§ãããQiitaã§ã¯ããã«ãä»ã®ãµã€ãã§ã¯ããã«ããã
颿°ã»ã³ã³ã¹ãã©ã¯ã¿ãŒã»ã¯ã©ã¹
ããã°ã©ã ã
# äžè¬çãªé¢æ°ãPython3 ã§ãããšããã®ãdef hoge_add(x, y):ã
function hoge_add(x, y)
x + y # Ruby ã®ããã«ããæžããã ãã§ return ããããæžããŠãè¯ã
end # hoge_add
# Python3 ã§ãããšããã®ã©ã ãåŒã¿ãããªãã€ãšã¯èšãé£ã
hoge_pseudo(x, y, z) = 2x + 3y + 4z # æ°åŒã£ãœããæžãã
# ãã£ã¡ãã©ã ãåŒ
hoge_lambda = x -> x^2 + 2x - 1
# æ»ãå€ã¯ã¡ãããšã¿ãã«ã§ããŠããã
function hoge_swap(a, b)
b, a
end # hoge_swap
# åŒæ°ãåçã«ã§ãããPython3 ã§ãããšããã® **kwargs
function hoge_dic(x; kwargs...)
for arg in kwargs
x += kwargs[arg.first]
end
return x
end
# åæå®ãC/C++ ã§ã¯æ®éããã®å以å€ã§ã¯ãšã©ãŒãåºãã
function hoge_float_add(x::Float64, y::Float64)
x + y
end
# 以äžãã main
# Python3 ã¿ããã« if __name__ == '__main__'ã¿ãããªãã®ããªãã®ãåŸã§èª¿ã¹ã
println("hoge_add(3, 5) = ", hoge_add(3, 5))
println("hoge_pseudo(2, 4, 6) = ", hoge_pseudo(2, 4, 6))
println("hoge_lambda(4) = ", hoge_lambda(4))
println("hoge_swap(5, 6) = ", hoge_swap(5, 6))
println("hoge_dic(12, kwargs...) = ", hoge_dic(12, uno=1, due=2, tre=3))
println("hoge_float_add(2., 3.) = ", hoge_float_add(2., 3.)) # hoge_float_add(2, 3) ã§ã¯ Int64 åãªã®ã§ãšã©ãŒ
println("methods(hoge_float_add) = ", methods(hoge_float_add)) # ããã§åŒæ°ã®åã¯äœã«ããã°è¯ããããã
matA = [1 2;
4 3]
matB = [5 2;
3 2]
intC = 5
println("sin.(matA) = ", sin.(matA)) # ãã£ãäœã£ããã¯ãã«ã®ãããŒããã£ã¹ããã.ãã䜿ããªããšãšã©ãŒã«ãªã
println("matA ./ matB = ", matA ./ matB) # ããã§èŠçŽ ããšã®èšç®ã«ãªã
println("matA .+ intC = ", matA .+ intC) # è¡å + ã¹ã«ã©ãŒ ã¯ãã¡ãããããŒããã£ã¹ããªã®ã§ãããªã
# ããããã°æŒç®åã¯é¢æ°ãªã®ã§ããããªããã®ããããªãæžãæ¹ã眷ãéã
println("+(6, 8, 19) = ", +(6, 8, 19)) # 6 + 8 + 19 ãšåçŸ©çµæã
hoge_add(3, 5) = 8
hoge_pseudo(2, 4, 6) = 40
hoge_lambda(4) = 23
hoge_swap(5, 6) = (6, 5)
hoge_dic(12, kwargs...) = 18
hoge_float_add(2., 3.) = 5.0
methods(hoge_float_add) = # 1 method for generic function "hoge_float_add":
[1] hoge_float_add(x::Float64, y::Float64) in Main at /Users/278mt/Desktop/julia-test/sample_07.jl:27
sin.(matA) = [0.8414709848078965 0.9092974268256817; -0.7568024953079282 0.1411200080598672]
matA ./ matB = [0.2 1.0; 1.3333333333333333 1.5]
matA .+ intC = [6 7; 9 8]
+(6, 8, 19) = 33æŒç®åã¯é¢æ°ãªã®ã§ãäžã®ãããªããã®ããããªãæžãæ¹ãã§ããŸãã詳现ã¯ãæŒç®åã¯é¢æ°ãªã®ã§ããšããéšåã®ãªã³ã¯ãåç §ã
ã³ã³ã¹ãã©ã¯ã¿ãŒã«é¢ããŠã¯äœ¿ãããšã«ãªãã°æ€çŽ¢ããã°è¯ããšæããããªããªãããã«ããã
ç§ãã¿ãæãã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã¯Swift5ã®iotaã¿ããã
次ã«ã¢ãžã¥ãŒã«ãä»ã®èšèªã§èšããšããã®classã
2幎åã®èšäºã§ã¯ããJulia0.6.1ã¯ãªããžã§ã¯ãæåã§ã¯ãªãããšæžãããŠããŸãããä»ããªããžã§ã¯ãå¿åãšã¯èšããªããã«ãã»ã«åãã€ã³ã¹ã¿ã³ã¹ãPython3ãC/C++ã¿ãããªå®è£ ããªãããŠããªãã®ã§ãOOPã§ã¯ãªãã®ã¯ç¢ºãã
ãªã©ã€ãªãŒã®Juliaããã°ã©ãã³ã°ã¯ãã¯ããã¯ââèšèªä»æ§ããããŒã¿åæãæ©æ¢°åŠç¿ãæ°å€èšç®ãŸã§ã«åŸã£ãŠãã¯ã©ã¹ã®ãããªå®è£ ã¯ä»¥äžã®æ¹æ³ã§ã§ããããã§ãã
mutable struct Vector2D
x::Float64
y::Float64
end # mutable struct Vector2D
function add(v1::Vector2D, v2::Vector2D)
Vector2D(v1.x+v2.x, v1.y+v2.y)
end # function add
# main
v1 = Vector2D(1, 2)
v2 = Vector2D(5, -7)
println(add(v1, v2))ã§ããªã©ã€ãªãŒããããããã0ããå§ããã®ã¯å€ã ããã1ããå§ããšããã
ã§åºåçµæã
Vector2D(6.0, -5.0)ãŸãããã«é¢ããŠã¯ç§ãå匷äžè¶³ã ãããããããããªã
ä»ã«ã¯ãRubyãšSwift5ãæãåãããã¿ãããªdoæ§æããã£ãããTeXã¿ããã«begin endããã£ãããPython3ã®__repr__ã¿ãããªletããã£ããããŸããããŸãã°ã°ã£ãŠãã ããã
try catch
çç¥ãã ã£ãŠå®å šã«ããã®ãŸãŸã ãã®ã
ãããã«
ããšããšPython3ã¯æžããã®ã§ãJuliaã®å匷ã«ã¯ãããªã«èŠåŽããŸããã§ããã
ãšãããããããããã°æ©æ¢°åŠç¿ã«ã¯Juliaã£ãŠèšèªããã£ããªããšæãåºããŠãããã®ãµã€ãã«æžããŸã§ã«3æ¥ãçµã£ãŠãªãã
Python3ããRèšèªããRubyããFORTRANããC/C++ããããã£ãããšããã人ã«ãšã£ãŠã¯çµæ§æ¥œã«åŠã¹ãèšèªã ãšæããŸãã
ãã¡ãããåå¿è 倧æè¿ãšããåèæžããæç®ãããå¢ããã°ãåå¿è ã«ãšã£ãŠãããããèšèªãªã®ã§ã¯ãªãã§ããããã
ããã§ãç§ã¯Python3ã奜ãã ïŒïŒ
åŸæ¥è«
ãŠã§ãäžã«ãã¯ã€ãã¯ãœãŒãã§JuliaãšPython3ãæ¯èŒããŠã¿ãïŒãã¿ãããªã®ããããŸãã
æ£çŽèšã£ãŠã1åã®ã¯ã€ãã¯ãœãŒãã§ã¯Juliaã®ã¬ãŸã³ããŒãã«ãçããããªããªã³ã³ãã€ã«ã«é ããæãããšæããŸãã
ããèšç®ã1e5å詊ããŠã¿ããšãããããPython3ãããJuliaã®æ¹ãå§åçã«éããïŒããšãªãã®ã§è©ŠããŠã¿ãŠãã ããïŒæå1e8åã§ãã£ããã©ãPython3ã®ã»ãã¯çŸå®çãããªãã¬ãã«ã®æéãããã£ãïŒ
以äžãæ¯èŒã®ã³ãŒããåãæå®ããã°ãã£ãšéããªãã
quicksort(xs) = quicksort!(copy(xs))
quicksort!(xs) = quicksort!(xs, 1, length(xs))
function quicksort!(xs, lo, hi)
if lo < hi
p = partition(xs, lo, hi)
quicksort!(xs, lo, p - 1)
quicksort!(xs, p + 1, hi)
end
return xs
end
function partition(xs, lo, hi)
pivot = div(lo + hi, 2)
pvalue = xs[pivot]
xs[pivot], xs[hi] = xs[hi], xs[pivot]
j = lo
@inbounds for i in lo:hi-1
if xs[i] <= pvalue
xs[i], xs[j] = xs[j], xs[i]
j += 1
end
end
xs[j], xs[hi] = xs[hi], xs[j]
return j
end
for i in 1:1e5
res = quicksort([3, 6, 2, 4, 5, 1])
if i % 1e4 == 0
println(res)
end
end
println("END")Python3ã¯ããã
def quicksort(xs, lo=0, hi=5):
if lo < hi:
p = partition(xs, lo, hi)
quicksort(xs, lo, p-1)
quicksort(xs, p+1, hi)
return xs
def partition(xs, lo, hi):
pivot = (lo + hi) // 2
pvalue = xs[pivot]
xs[pivot], xs[hi] = xs[hi], xs[pivot]
j = lo
for i in range(lo, hi):
if xs[i] <= pvalue:
xs[i], xs[j] = xs[j], xs[i]
j += 1
xs[j], xs[hi] = xs[hi], xs[j]
return j
for i in range(int(1e5)):
res = quicksort([3, 6, 2, 4, 5, 1])
if i % 1e4 == 0:
print(res)
print('END')ãŸãææã§èšããšãPython3ã¯awkãsedãbashã®ä»£ããã«ã䜿ãããã¹ã¯ã¬ã€ãã³ã°ã楜ã ããšããããäœãæãç«ã£ããéžãã§ãå€§èŠæš¡ãªããŒã¿ãè§£æããããããã®ã«ã¯Juliaã䜿ããšãã«ãç§ã®å°æ¥çã«ã¯ãªããšæãã
ãã OOPãããªãã£ãŠã®ãã¡ãã£ãšç§ã«ãšã£ãŠã¯ãã©ãã
- åã®èšäº
Pythonã§ã©ã€ãã²ãŒã 2020.02.02
- 次ã®èšäº
ã€ãããå§ãã100æ¥ãã©ã³ã¹èªæ€å® 2020.07.24