Julia!!
what is julia?
- julia๋ผ๋ ์ธ์ด๊ฐ ์์ต๋๋ค. ์์ ์ ๋ค์ด๋ณธ ์ ์ด ์๊ธฐ๋ ํด์. ์ธ๊ตญ์ ๊ณ์ ์ฐ์ ๊ณตํ ๋ถ์ผ(์ ํํ๋ ์ต์ ํ)์ ๊ต์๋์ ๋ธ๋ก๊ทธ์์ ์์ ์ ๋ค์ด๋ณธ ์ ์ ์์๋๋ฐ ์ฌ์ฉํ์ง๋ ์์์ด์.
- ์ฌ์ฉํ์ง ์์ ์ด์ ๋, 1) ์ด๋ฏธ ๋๋ ํ์ด์ฌ์ ๋ฐฐ์ฐ๊ณ ์์๊ณ , 2) ํ์ด์ฌ์ ์๋ฌํด ์๋ค๊ณ ๋ณด๊ธฐ ์ด๋ ค์ ๊ณ , 3) ์ฌ์ํ์ง๋ง array indexing์ด 0์ด ์๋ 1๋ถํฐ ์์ํ๋ค๋ ์ฌ์ค์ด ๋ณ๋ก์๊ณ , ์ ๋๊ฐ ์์๋ค์. ๋ฌผ๋ก ๊ธฐ์ต์ ๋ช ํํ์ง ์์ต๋๋ค๋ง.
- ์๋ฌดํผ, julia๋ผ๋ ์ธ์ด๋ MIT์์ ๋ง๋ ์ธ์ด๊ณ , ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Julia is a high-level general-purpose[12] dynamic programming language that was originally designed to address the needs of high-performance numerical analysis and computational science
- ์ ๋๋ค. ์ผ๋จ high-level์ด๋ผ๋ ๊ฒ์ ํ์ด์ฌ์ด๋, R์ฒ๋ผ ๋๋ฆ ์์ฐ์ด์ ๊ฐ๊น๊ฒ ์ฝ๋ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ฃ (์ด์ ๋ธ๋ฆฌ, c์ฒ๋ผ ์ปดํจํฐ์ ๊ฐ๊น๊ฒ ์ฝ๋ฉํ๋ ๊ฒ์ด ์๋๋ผ, ์ฌ๋์๊ฒ ๊ฐ๊น๊ฒ ์ฝ๋ฉํ๋ ๊ฒ์ ๋งํฉ๋๋ค).
- ๋ํ dynamic programming์ด๋ผ๋ ๊ฒ์ ๊ฐ๋จํ ๋งํ๋ฉด type์ compile๋ ๋ฒจ์์ ์ก๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ์ด์ฃ . ์๋ฅผ ๋ค์ด ๋ณด๋ฉด ์๋ ์ฝ๋์์ c์์๋ ๋ณ์์ ํ์ ์ ํจ๊ป ์ ์ธํด์ค ๋ฐ๋ฉด, python์์๋ ๋ณ์์ ํ์ ์ ์ ์ธํด์ฃผ์ง ์์ต๋๋ค. ์ฆ ๋์ ์ผ๋ก ํ์ดํํ๋ค๋ ๊ฒ์ด์ฃ .
int a = 10;//c์์๋ ๋ณ์์ ํ์
์ ํจ๊ป ์ ์ธํด์ค์ผํจ
a = 10 ## python์์๋ ๋ณ์์ ํ์
์ด ํจ๊ป ์ ์ธ๋ ํ์๊ฐ ์์.
-
์ ๋ python๊ฐ์ ์ธ์ด์ ๊ฒฝ์ฐ ๋ณ์์ ๋ํ ํ์ ์ด ๋ฐํ์์์ ๋ฐ๋ ์ ์๋๋ก ์ธํ ๋์ด ์์ด์ ์๋๊ฐ ๋๋ฆด ์ ๋ฐ์ ์๋ค, ๋ผ๊ณ ์๊ฐํ๊ณ ์์๋๋ฐ, julia์ ๊ฒฝ์ฐ๋ python๊ฐ์ ์ธ์ด์ ๊ฐ์ ์ธ high-level interface๋ฅผ ๊ฐ์ง๋ฉด์ ์๋๋ ๋งค์ฐ ๋น ๋ฅด๋ค ๋ผ๋ ๊ฒ์ด์ฃ โฆ..์ค๊ณ ์ดโฆ.
-
์ค์ ๋ก julia performance benchmark๋ฅผ ๋ณด๋ฉด ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ๋น๊ตํ ์ ์์๋งํผ ๋น ๋ฅด๋ค๋ ๊ฒ์ ์ ์ ์์ด์. ํนํ y์ถ์ exponential์ด๊ธฐ ๋๋ฌธ์, julia์ ๊ฒฝ์ฐ fibonacci recursion๋ฌธ์ ์ ๋ํด์๋ python์ ๋นํด์ 100๋ฐฐ ์ ๋ ๋น ๋ฅด๋ค๊ณ ํฉ๋๋ค(memoization๋ฅผ ํ์ง ์๊ณ ๋๋ฆฐ ๊ฒ์ด ์๋๊น ์ถ์ต๋๋ค๋ง. ๋ฒค์น๋งํฌ๋ ์ ๊ฐ ๋์ค์ ๋ฐ๋ก ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
install it
- ์๋ฌดํผ ๋ง์ด ๊ธธ์๊ณ ์ค์นํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
julia on cloud
- ์ค์นํ๊ธฐ ๊ท์ฐฎ์ผ์ ๋ถ๋ค์ ์ฌ๊ธฐ์์ ํด๋ผ์ฐ๋ ์์์ ์ฅด๋ฆฌ์๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
- ๋จ, ๋ฌด๋ฃ๋ก ์ฌ์ฉํ์ ๊ฒฝ์ฐ์๋ ์ ๋ ๋งค์ฐ ๋๋ ค์ ๊ทธ๋ง๋์ต๋๋ค.
install julia
- julia download์์ ์ค์นํ์๋ฉด ๋ฉ๋๋ค. ์ ๋ ๋งฅ์ ์๋๋ค.
- ๋ณดํต ์ค์นํ๊ณ ๋๋ฉด ์๋์ผ๋ก
.bash_profile์ ๋ฑ๋ก๋๋๋ฐ, julia์ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ฑ๋ก๋์ง ์์์ ์๋ ๋ถ๋ถ์ ์ถ๊ฐํด์ค๋๋ค.
# julia added
export PATH="/Applications/Julia-1.0.app/Contents/Resources/julia/bin:$PATH"
- ์ด์ ํฐ๋ฏธ๋์์
julia๋ฅผ ์น๋ฉด ์๋์ฒ๋ผ ์ ๋ฉ๋๋ค.
MDOM14110-2:~ frhyme$ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.0.0 (2018-08-08)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
install julia pro
-
julia pro๋ python์์ ์๋์ฝ๋ค์ ์ ์ฌํ ๋๋์ผ๋ก ๋ณด์ ๋๋ค.
-
ํนํ, jupyter notebook๋ฑ๊ณผ ์ฐ๋๋ ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ์, ์ผ๋จ์ ์ด ์์ด๋ฅผ ์ค์นํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฅ julia๋ฅผ ์ค์นํ๋ฉด jupyter notebook๊ณผ ์ฐ๋ํ๋ ค๋ฉด ์กฐ๊ธ ๊ท์ฐฎ์ ์ ๋ค์ด ์๊ธฐ๋ ๊ฒ ๊ฐ์์.
-
์ ๊ฐ python3์ ์ค์นํ๊ณ library๋ฅผ ์ด๊ฒ์ ๊ฒ ์ค์นํ๋ค๊ฐ ๋ํ๋์ ๋ฌธ์ ๋๋ฌธ์ ํ๋ค์๋ ๊ฒฝํ์ ์๋์ฝ๋ค๊ฐ ๋ค ํด๊ฒฐํด์ค ๊ธฐ์ต์ด ์์ด์, ๊ฐ๋ฅํ๋ฉด ๋ฌถ์ฌ์ง ํํ๋ฅผ ์ค์นํ๋ ๊ฑธ ์ข์ํด์.
-
์ค์น๋ ์ด๋ ต์ง ์์ต๋๋ค. ๊ทธ๋ฅ ์ค์นํ๊ณ ๊ทธ๋ค์์ jupyter notebook์์ ์ฝ์์ julia๋ก ๋ณ๊ฒฝํด์ค ์ ์์ต๋๋ค.
-
๋ํ, julia ์ง์์์๋ juno๋ผ๋ IDE๋ฅผ ํ๋ณดํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค๋ง, ์ ๋ ํ์ํ์ง ์์์. atom๊ธฐ๋ฐ์ ์๋ํฐ์ธ๊ฒ ๊ฐ์๋ฐ, atom์ด ๋งฅ์์ ๋๋ฌด ๋๋ ค์ ์ซ์ดํฉ๋๋ค.
julia tutorial
- ์ด์ ์ค์น๋ ๋ค ํ๊ณ , ๊ธฐ๋ณธ์ ์ธ julia syntax๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ญ ๋ฌผ๋ก learn julia in y min์ ๋ค์ด๊ฐ๋ฉด ๋ค ์๋ ๋ด์ฉ์ด๊ธฐ๋ ํฉ๋๋ค.
- ์ ๋ vscode๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋งํฌ๋ค์ด์์ julia code block์ ์ธ์ํ์ง ๋ชปํด์
Markdown Julia๋ผ๋ ์ต์คํ ์ ์ ์ค์นํ์ต๋๋ค.
julia basic
- ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ดค์ต๋๋ค. ๋ฌธ๋ฒ์ ์ผ๋ก๋ ํ์ด์ฌ๊ณผ ๋น์ทํ ๋ถ๋ถ์ด ์๋นํ ๋ง๋ค์.
### basic
println(repeat("=", 20))
x = 10
println("$x, $(2x), $(x^2+2x+1)")## 2*x๊ฐ ์๋๋ผ 2x๋ก ํด๋ ์์์ ์ ์ธ์ํด์ค
let xx = 0;println(xx);end ## semicolon์ผ๋ก oneliner ๊ฐ๋ฅ
println("$(typeof('c')), $(typeof("C"))")## char์ string์ด ๋ฐ์ดํ์ ํฐ ๋ฐ์ดํ๋ก ๊ตฌ๋ถ๋จ
println(repeat("=", 20))
## loop and iterator tools
for x in enumerate(['a', 'b', 'c']);println(x);end ## loop๋ python๊ณผ ๋งค์ฐ ์ ์ฌํจ, enumerate๋ ์ฌ์ฉ๊ฐ๋ฅ
println(repeat("=", 20))
for x in zip([1,2,3], ['a', 'b', 'c']);println(x);end ## zip๋ ์ฌ์ฉ๊ฐ๋ฅ
println(repeat("=", 20))
### container
x_lst = append!([1,2,3], 1)## append๊ฐ ๊ฐ์ฒด์ method๊ฐ ์๋ function์ผ๋ก ์กด์ฌํจ ๋ํ ์์์ ๋ฆฌํดํด์ค
println("$x_lst, length: $(length(x_lst))")
println(repeat("=", 20))
dict1 = Dict("one" => 1, "two" => 2, "three" => 3)
println(typeof(dict1))## dictionary์ key, value์ ๋ํด์ ํ์
์ด ์ ํด์ง
println("keys: $(keys(dict1))")## key, value๊ฐ function์ผ๋ก ์ฌ์ฉ๋จ
println("values: $(values(dict1))")
set1 = Set([1,1,1,1,1,2,2,2,2,3])
println("set1: $set1")
### exception handling
println(repeat("=", 20))
try
println(x_lst[0])
catch e
println(e)## indexing์ด 1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์๋ฌ ๋ฐ์ํจ
end
println(repeat("=", 20))
### function
function func1(x, y)
x+y ## return์ด ๋ฐ๋ก ๋ช
์ํ์ง ์์๋๋จ. ํด๋ ๋์ง๋ง, ๋ง์ง๋ง์ ์กด์ฌํ๋ ๊ฐ์ด ์๋์ผ๋ก ๋ฆฌํด๋จ
end
anony_func1 = (x, y) -> x+y ## anonymous func
println(func1(2, 2))
println(anony_func1(2,2))
println(repeat("=", 20))
### list comprehension and dot function
a = [i for i in range(0, 10)]
println(a)
println(a.^2)## dot function์ ์ฐ๋ ค๋ฉด . ๊ณผ ํจ๊ป ์จ์ฃผ๋ฉด ๋จ
println(repeat("=", 20))
### time checking
@time begin
[i for i in range(0, 10000)].*3
end
println(repeat("=", 20))
### type
## type๊ฐ์ inference tree๊ฐ ์์ผ๋ฉฐ, ๊ฐ์ฒด์ฒ๋ผ supertype์ผ๋ก ์ ๊ทผ๊ฐ๋ฅ
## type inference์ ์ด ๋ฐฉ์์ผ๋ก ์งํํ๋๋ฏ
for t in [Float16, Int16]
print("$t")
while true
print(" ==> $(supertype(t))")
t = supertype(t)
if t == Any;break;end
end
print("\n");println(repeat("=", 60))
end
====================
10, 20, 121
0
Char, String
====================
(1, 'a')
(2, 'b')
(3, 'c')
====================
(1, 'a')
(2, 'b')
(3, 'c')
====================
[1, 2, 3, 1], length: 4
====================
Dict{String,Int64}
keys: String["two", "one", "three"]
values: [2, 1, 3]
set1: Set([2, 3, 1])
====================
BoundsError([1, 2, 3, 1], (0,))
====================
4
4
====================
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
====================
0.056191 seconds (12.91 k allocations: 857.824 KiB)
====================
Float16 ==> AbstractFloat ==> Real ==> Number ==> Any
============================================================
Int16 ==> Signed ==> Integer ==> Real ==> Number ==> Any
============================================================
pipeline
- ํจ์๋ผ๋ ๊ฒ์ ํน์ input์ ๋ฐ๊ณ ํน์ output์ ๋ด๋ฑ๋ ํ์์ด์ฃ . ๋ง์ฝ ์ด๋ค ๊ฐ, ํน์ ๋ฐ์ดํฐ, ๋ฐ์ดํฐ ํ๋ ์ ๋ฑ ๋ค์ํ ์ค๋ธ์ ํธ์ ๋ํด์ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ์ ์ฉํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ ์์๊น์?
- ๋ณดํต ์๋ ์ฝ๋์ฒ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋๋ฐ์.
- ์ฐ์ ๊ดํธ์ ํจ์๋ช ์ด ์ฐ์์ผ๋ก ๋ค์ด๊ฐ ์์ด์ ๊ฐ๋ ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง๊ณ
- ํด๋น ๋ฐ์ดํฐ์ ํจ์๊ฐ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง๋ฅผ ์ฝ์ผ๋ ค๋ฉด ์ ์ผ ์์ชฝ๋ถํฐ ๋ฐ์ผ๋ก ์ฝ์ด์ผํ์ฃ .
- ์ด๊ฒ ๊ท์ฐฎ์์ ํจ์๋ฅผ ๊ทธ๋ฅ ํฐ ํ๋์ ํจ์๋ก ๋ง๋ค๋ ค๊ณ ํ๋ ์ต๊ด์ด ์๊ธฐ๊ธฐ ์ฝ๊ณ
- ๋ฌผ๋ก map function์ ์ฐ๋ฉด ์ข ๋์์ง๊ธฐ๋ ํฉ๋๋ค๋ง, map function์ผ๋ก๋ ํ์ด์ฌ์์ ์๋ก์ด ๋ณตํฉํฉ์๋ฅผ ์ ์ํด์ ์ฌ์ฉํ๊ธฐ๋ ์ด๋ ค์์. ๋ฌผ๋ก reduce๋ฅผ ์ฐ๋ฉด ๊ฐ๋ฅํด์ง๊ธฐ๋ ํฉ๋๋ค๋ง, ์ ๊ฐ ๋ค์์ ๋ค์ ์์ฑํ๊ฒ ์ต๋๋ค.
a = 10
func1(func2(func3(func4(a))))
- ์๋ฌดํผ ๊ฐ์, python์์๋ ๋ถ์กฑํ ์ด๋ฌํ ํจ์์ ์ฝ๋ฉ์ด๋ผ๊ณ ํ ๊น์, ์ด๋ฐ ๋ถ๋ถ์ด R์๋ pipeline(
%>%)์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ julia์๋|>๊ฐ ์์ต๋๋ค. - ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
a = 10 |> (x-> x+1) |> (x-> 2*x) |> (x->x^2) |> log
println(a) ## 6.182084906716632
- ๋ค์ด๊ฐ ๊ฐ์ ๋ฃ๊ณ ,
|>๋ฅผ ํ์ํ๊ณ , ํจ์์ ๋๊ฒจ์ฃผ๊ณ , ๋ค์ ์๋ก์ด ํจ์๋ฅผ ๋๊ฒจ์ฃผ๊ณ , ์ด๋ ๊ฒ pipeline์ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ๋ง๋ค๋ฉด(๋ฌผ๋ก ์ง๊ธ์ ๊ทธ๋ฅ ์ต๋ช ํจ์๋ฅผ ์ฌ์ฉํ์ง๋ง), ๊ฐ๋ณํจ์๋ ๋ชจ๋๋ก์จ ๋ง๋ค๊ณ ์ด ํจ์๋ฅผ ์ฐ๊ฒฐํ์ฌ ์๋ก์ด ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ฉ์ดํ์ฃ . - ๋ค์์ ์ฌ๋ฌ๊ฐ์ง๋ก ์ ์ฉํด๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๋งํฉ๋๋ค.
- ๊ทธ๋ฅ ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ๋ ํ๊ณ ,
- ์ ์๋ ์ฌ๋ฌ ํจ์๋ฅผ ์ฌ์ฉํด์ ์๋ก์ด ๋ณตํฉํจ์๋ฅผ ๋ง๋ค์ด๋ณด๊ธฐ๋ ํ๊ณ
- ๊ฐ์ ์ง์ map function์ผ๋ก ์ฌ์ฉํด๋ณด๊ธฐ๋ ํ์ต๋๋ค.
- ํน์๋ ํด์ ๋งํ์ง๋ง, julia์์ anonymous function์
x -> x+1๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์๋ฉ๋๋ค.
## R์๋ pipeline(%>%)์ด ์์ต๋๋ค. ์ด๊ฒ ์์ฃผ ํธํ๋๋ฐ, julia์๋ ์๊ตฐ์.
## pipeline์ ํจ์๊ฐ ์ฐ์์ผ๋ก ๋์ด๋๋ ๊ฒ์ ๋งํฉ๋๋ค. python์์๋ map์ ์ด์ฉํ๋ฉด ๊ตฌํ์ด ๋๊ธฐ๋ ํ๋๋ฐ
## ์ฉ ๋ง์์ ๋ค์ง๋ ์์์.
k_lst = [1,2,3]
for (i, k) in enumerate(k_lst)
## ์๋์ ๊ฐ์ด ํจ์๋ฅผ ์ฐ์์ผ๋ก ๋์ดํฉ๋๋ค.
new_x = k |> (x-> x+1) |> (x-> 2*x) |> (x->x^2) |> log
println("$i: $new_x")
end
### ์ฌ์ค ์์ฒ๋ผ anonymous function์ ์ฌ์ฉํ ๋๋ณด๋ค defined function์ ์ฌ๋ฌ๊ฐ ์ธ ๋ ๋ ํธํ๋ฐ์
## ํจ์๋ฅผ ์๊ฒ ์ชผ๊ฐ๊ณ ์ด๋ฅผ ์ฐ๊ฒฐํด์ ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค ์ ์๋ค๋ ์ธก๋ฉด์์ ๋งค์ฐ ์ ์ฉํ์ฃ .
println(repeat("==", 20))
pipe_comp1 = x -> x+1
pipe_comp2 = x -> 2*x
pipe_comp3 = x -> x^2
pipe_comp4 = x -> log(x)
func_pipe = x -> x |> pipe_comp1 |> pipe_comp2 |> pipe_comp3 |> pipe_comp4
for (i, x) in enumerate([1, 2, 3])
println("$i ==> $(func_pipe(x))")
end
println(repeat("==", 20))
## ๋ฌผ๋ก ์๋์ฒ๋ผ map function์ ์จ๋ ๋ฉ๋๋ค, ์ทจํฅ์ด์ฃ .
r = [1,2,3,4]; x = copy(r)
pipes = [pipe_comp1, pipe_comp2, pipe_comp3, pipe_comp4]
for p in pipes
x = map(p, x)
end
println(x)
1: 2.772588722239781
2: 3.58351893845611
3: 4.1588830833596715
========================================
1 ==> 2.772588722239781
2 ==> 3.58351893845611
3 ==> 4.1588830833596715
========================================
[2.77259, 3.58352, 4.15888, 4.60517]
package managing
- python์์๋ pip๋ก package๋ฅผ ์ค์นํ๊ณ ,
import๋ฅผ ์ฌ์ฉํด์ ํจํค์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. - julia์์๋ ๋ค์๊ณผ ๊ฐ์์.
Pkg.available()## ์ฌ์ฉํ๊ฑฐ๋, ์ค์นํ ์ ์๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Pkg.add("Calculus") ## ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์น
Pkg.installed()## ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฆฌ์คํธ์
Pkg.add("Calculus")## install it with all dependent lib
using Calculus ## like from Calculus import *
import Calculus ## like import pandas
plotting
-
plottingํ๊ธฐ ์ํด์๋
Winston์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๋ค๊ณ ํฉ๋๋ค. ์ค์นํด์ผ ํ ๊ฒฝ์ฐ์๋ ์๊ฐ์ด ์์ฃผ ๋ง์ด ๊ฑธ๋ ธ์ต๋๋ค. ์ฝ๊ฐ ์ค๋ฒํด์ 1์๊ฐ ์ ๋ ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค์. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ์คํจํ์ต๋๋ค. -
์ผ๋จ ์ค์น๋ฅผ ํฉ๋๋ค. ์์ฃผ ๋ง์ ๋ํ๋ํธ ํจํค์ง๋ค์ ์ค์นํ๊ธฐ ์์ํฉ๋๋ค. ์ด๊ฒ ์ฝ ํ์๊ฐ ์ ๋ ๊ฑธ๋ฆฌ๊ณ ์.
Pkg.add("Winston")
INFO: Cloning cache of Cairo from https://github.com/JuliaGraphics/Cairo.jl.git
INFO: Cloning cache of IniFile from https://github.com/JuliaIO/IniFile.jl.git
INFO: Cloning cache of Tk from https://github.com/JuliaGraphics/Tk.jl.git
INFO: Cloning cache of Winston from https://github.com/JuliaGraphics/Winston.jl.git
INFO: Installing Cairo v0.5.2
INFO: Installing IniFile v0.4.0
INFO: Installing Tk v0.5.2
INFO: Installing Winston v0.13.2
INFO: Building Homebrew
...
- ์ด์ ์ฌ์ฉํ๋ ค๊ณ ๋ณด๋, ๋ ์๋ฌ๋ฉ์์ง๊ฐ ๋น๋๋ค.
Cairo๋ฅผ ๋น๋ํด์ฃผ๋ผ๊ณ ํ๋๊ตฐ์..
using Winston
INFO: Precompiling module Cairo.
ERROR: LoadError: Cairo not properly installed. Please run
Pkg.build("Cairo")
- ๋น๋ํด์ฃผ๊ณ
Pkg.build("Cairo")
- ์ด์ ์จ๋ณด๋ ค๊ณ ํ๋๋ฐ, ์ด์ ๋
plot์ด๋ผ๋ ํจ์๋ณ์๊ฐ ์๋ค๊ณ ํ๋ค์โฆ.์ด์ฉ๋ผ๋๊ฑด์งโฆ
# plot some data
using Winston
pl = Winston.plot(cumsum(rand(500) .- 0.5), "r", cumsum(rand(500) .- 0.5), "b")
# display the plot (not done automatically!)
display(pl)
# save the current figure
savefig("winston.svg")
# .eps, .pdf, & .png are also supported
# we used svg here because it respects the width and height specified above
UndefVarError: plot not defined
-
๊ทธ๋์ ์ข ๋ ์ฐพ์๋ณด๋, ์ด๋ฐ ๊ฒฝ์ฐ๋ค์ด ์ข ์ข ์๋๊ฒ ๊ฐ์์. ์๋ง๋ ์ ๊ฐ ์ค์นํ ๋ฒ์ ๊ณผ ํ๋กํ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ(ํนํ, jupyter notebok์ฒ๋ผ ์น์์ ๋์๊ฐ๋ ์ฉ๋๋ก๋)์๋ ๋ฌธ์ ๊ฐ ์ข ์๋ ๊ฒ ๊ฐ๊ณ ์.
-
๊ทธ๋์
PyPlot๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊น์๋ด ๋๋ค. ์ด ์์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, python์์ matplotlib๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ค๋๋ฐ, ๊ทธ๋ด ๊ฑฐ๋ฉด, ์ ๊ฐ ๊ทธ๋ฅ ํ์ด์ฌ์ผ๋ก ํ์ง, ๋ญํ๋ฌ julia๋ฅผ ๊น์๋๊ฐ ์ถ์ง๋ง ๋ญ, ๊ทธ๋ฅ ํฉ๋๋ค. -
๊ทธ๋ฌ๊ณ ์๋ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ ๋ฉ๋๋ค. ํ โฆ
Pkg.add("PyPlot")
using PyPlot
x = -2pi:0.1:2pi;
plot(x, sin(x.^2)./x);
is it faster??
- ๋๊ณ , ์ด์ ๋น ๋ฅธ์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
compute pi
- pi๋ฅผ ๊ณ์ฐํด๋ณด๋ ค๊ณ ํฉ๋๋ค. spigot algorithm ์ ์ด์ฉํ ๊ฑฐ์์.
- ํ์ด์ฌ ์ฝ๋๋ก ๋ฐ๊พธ๋ฉด
%%timeit -n 10 -r 1
def compute_pi(n=10):
r = 0
for k in range(0, n):
r+= 1/(16**k)*( 4/(8*k+1) - 2/(8*k+4) - 1/(8*k+5) - 1/(8*k+6))
return r
compute_pi(20000)
- julia ์ฝ๋๋ก ๋ฐ๊พธ๋ฉด
@time begin
function compute_pi(n=10)
r = 0
for k in 0:9
r+= 1/(16^k)*( 4/(8k+1) - 2/(8k+4) - 1/(8k+5) - 1/(8k+6))
end
r
end
compute_pi(20000)
end
-
python์ ๊ฒฝ์ฐ๋ 2.46์ด๊ฐ ๊ฑธ๋ฆฌ๊ณ , julia์ ๊ฒฝ์ฐ๋ 0.02์ด๊ฐ ๊ฑธ๋ฆฝ๋๋คโฆ.
-
์ข ๋ ๋น๊ต๋ฅผ ํด๋ณด๊ธด ํด์ผ๊ฒ ์ง๋ง, ๋น ๋ฅด๊ธด ์ง์ง ๊ฐ๋น ๋ฅด๋ค์โฆ..
-
๋ฌผ๋ก
numpy๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋นจ๋ผ์ง๊ธฐ๋ ํด์. 470 microsecond, ์ฆ 0.00047 ์ด๋๊น, ๋ ๋น ๋ฅด๊ตฐ์. ๋ฌผ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ์ผ ํ๋ ๊ฒ๊ณผ, pure julia์๋ ๋น๊ต๋ฅผ ํ๊ธฐ ์ด๋ ต๊ธฐ๋ ํ์ฃ .
%%timeit -n 1 -r 1
def compute_pi(n=10):
return np.array([ 1/(16**k)*( 4/(8*k+1) - 2/(8*k+4) - 1/(8*k+5) - 1/(8*k+6)) for k in range(0, 10)]).sum()
print(compute_pi(20000))
wrap-up
- ์ ๋ ์ผ๋จ ์ด ํฌ์คํธ๋ฅผ ๋ค ์ฐ๊ณ ๋ ๋ค์์, juliaPro๋ฅผ ์ง์ฐ๊ณ julia1.0์ ๋ค์ ์ค์นํ๋ ๊ฒ์ด ๋ ์ ํฉํ์ง ์์๊น? ์๊ฐํ๊ณ ์์ต๋๋ค.
- ๋ํ๋์๋ฅผ ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ฌถ์ฌ์๋ juliaPro๋ฅผ ์ค์นํ ๊ฑด๋ฐ, ์๊ฐ๋ณด๋ค ์ ํด์ฃผ์ง ๋ชปํ๊ณ ์๋ ๊ฒ ๊ฐ์์.
- ์๋ ์ธก๋ฉด์์๋ julia๋ฅผ python์ด ์ด๊ธธ ์๊ฐ ์์ต๋๋ค. ๋ฌผ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅด ๊ฐ์ ธ์์ ์ฒ๋ฆฌํ๋ฉด ๋ฌ๋ผ์ง๊ธฐ๋ ํ์ง๋ง, pureํ๊ฒ ์ ๋ ๊ฒ ๋น ๋ฅด๋ค๋ ๊ฒ์ ๊ต์ฅํ ํฐ ์ฅ์ ์ด์ฃ . ์ค์ ๋ก numpy์ ๊ฒฝ์ฐ๋ c๋ฅผ ์ฌ์ฉํ๋๊ฑด๋ฐ, ์์ํ๊ฒ julia๋ง์ผ๋ก ์ ์๋๊ฐ ๋์ค๋ ๊ฑด ์ข ์๋์ ์ธ ๊ฒ ๊ฐ์์.
- ๋ฌผ๋ก ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ๋ ํด๋ณด๊ณ ์ถ๊ธฐ๋ ํฉ๋๋ค.