소개
julia는 python의 편리함과 c의 속도를 두루 갖춘 언어이다.
거기에 기존의 python의 라이브러리를 불러온다거나, matlab파일을 불러오는 작업도 패키지 다운로드를 통해서 가능하다.
대신 python 라이브러리를 그대로 불러와서 사용한다면, 속도는 기대하지 말자…
목차
설치
julia는 https://julialang.org/ 에서 받을 수 있다.
설치시 기본 설치경로는 C:\Users\“사용자 이름”\AppData\Local\Julia-1.1.0 이다.
1.1.0은 이 글 작성 기준으로 최신버전이며, 업데이트시 숫자가 바뀔 수 있다.
참고 사항으로 AppData는 기본적으로 숨겨져 있는 폴더이므로, 폴더 옵션에서 숨김 파일 표시를 하여 표시를 하든지, 경로명을 어딘가 저장해 둔 뒤 직접 디렉토리로 접근하도록 하자.
전용 에디터
julia 코드 작성을 위해서는 atom을 설치하면 된다.
정확히 얘기하면 julia 전용 에디터는 아니다. 범용으로도 쓸 수 있다. 다만, julia 코드 작성을 위한 툴을 제공하는 것이 현재는 atom 밖에 없을 뿐이다.
atom은 https://atom.io/ 에서 다운 받을 수 있다.
atom도 julia와 마찬가지로 AppData에 설치된다. 참고사항으로는 설치 시에 next 버튼을 누른다든지, 약관에 I agree를 체크할 일이 없다.
atom을 깔았다고 끝난 것이 아니다.
atom의 설치가 끝난 후, atom을 실행한 후, Settings 탭에서 Install 패널로 들어간다.
그 후에, uber-juno 를 검색하여 설치해준다.
설치가 끝나면 메뉴 항목에 julia가 보일 것이다.
거기서 start julia를 클릭해주면 밑에 REPL 창에 julia가 실행된 모습이 보인다.
uber-juno의 기능인지 atom의 고유기능인지 모르지만(아마 uber-juno 패키지의 기능일 것이라 예상한다) 한 라인에 대고 shift+enter를 해주면 그 라인의 실행 결과를 편집창에서 즉각적으로 보여준다.
코드 전체의 실행결과를 알고 싶다면, ctrl+shift+enter를 눌러주면 REPL창에 실행결과가 출력된다.
패키지 설치 방법
패키지 설치는
<Code:Julia> using Pkg Pkg.add(“받을 패키지명”) </Code>
을 편집창에서 타이핑한 후 실행해주면 된다.
혹은 julia창에서 직접
<Code:Julia> using Pkg </Code> <Code:Julia> Pkg.add(“받을 패키지명”) </Code>
이런 식으로 한 줄씩 입력해도 된다.
패키지 사용
위의 예에서 이미 예상했을 수도 있지만, 받은 패키지는 using 으로 사용할 수 있다.
<Code:Julia> using 패키지명 </Code>
예시
수치해석으로 근을 구하는 패키지 중에 NLsolve 라는 패키지가 있다.
이를 사용하기 위해서는 우선
<Code: Julia> using Pkg Pkg.add(“NLsolve”) </Code> 로 패키지를 받아준 후
<Code: Julia> using NLsolve </Code>
라고 해주면 된다.
using 대신 import를 써도 무방하지만, import로 사용하게 되면 패키지명.함수명 으로 함수에 접근을 해야한다. using을 사용하면 함수명만으로도 패키지 안의 함수에 접근할 수 있다.
다만 패키지를 만든 사람이 패키지명 없이 그 함수를 사용할 수 있게끔 만들어야 한다.
만약 패키지명 없이 사용할 수 없도록 만들어져 있다면, C:\Users\사용자명\.julia\packages 내에서 설치한 패키지를 찾아 .jl 형식의 소스코드를 열어서 수정해서 사용해도 될 것이다.
<Code:Julia> using Pkg Pkg.add(“LinearAlgebra”) </Code>
선형대수 계산을 하기 위해서는 LinearAlgebra 패키지를 설치해준 후 using을 해주어야 한다.
<Code:Julia> using LinearAlgebra
A = [1 2; 3 4]; lambda, vec = eigen(A); print(lambda) print(vec) </Code> $$ A = \begin{pmatrix} 1 & 2\\ 3 & 4\\ \end{pmatrix} $$ 를 만든 후 eigen() 함수로 고유값과 고유벡터를 구하고 각각을 출력하는 코드이다.
<Code:Julia> A = [1 2; 3 4]; </Code> 는 <Code:Julia> A = [1 2 3 4]; </Code> 로 해도 똑같은 결과를 얻는다.
세미콜론(;)의 경우 터미널 환경에서 출력값을 보이지 않기 위해 사용하는 것이다.
고유 벡터만을 구하고 싶다면 eigvecs() 함수를, 고유값만을 얻고 싶다면 eigvals() 함수를 사용하면 된다. 첫번째 고유벡터만을 얻고 싶다면 eigvecs(A)[:,1]을 하면 된다. 왼쪽 고유 벡터를 얻고 싶다면 inv(eigvecs(A))를 하면 된다.
행렬 곱의 경우 <Code:Julia> A = [1 2; 3 4]; B = [2 3; 4 5]; M = A*B </Code> 하면 $$\begin{pmatrix} 1 & 2\\ 3 & 4 \end{pmatrix} \begin{pmatrix} 2 & 3\\ 4 & 5 \end{pmatrix} = \begin{pmatrix} 10 & 13\\ 22 & 29 \end{pmatrix} $$ 로 일반적인 행렬곱의 결과가 나온다.
전치(Transpose)는 A' 으로 쓴다.
무작위 추출의 경우 <Code:Julia> using Pkg Pkg.add(“StatsBase”) </Code>
로 StatsBase 패키지를 설치한 후 using을 해주어야 한다.
<Code:Julia> using StatsBase
x = 1:10; sample(x) </Code>
하면 1부터 10까지 공차가 1인 등차수열이 x에 들어가고 sample(x)를 하면 x의 요소를 균일한 가중치로 무작위 복원 추출을 한다.
만약 가중 복원 추출을 원하면 <Code:Julia> using StatsBase
x = 1:10; weights = rand(10); # [0, 1) 의 범위에서 난수 10개 생성 후 1차원 배열로 만듦 sample(x, Weights(weights)) </Code>
이렇게 코드를 짜면 된다.
여러 개의 표본을 균일한 가중치로 뽑고 싶으면 <Code:Julia> using StatsBase x = 1:10 sample(x,n) </Code> 으로 n에 원하는 숫자를 넣으면 된다.
비균일 가중치로 여러개를 뽑고 싶다면 <Code:Julia> using StatsBase
x = 1:10; weights = rand(10); # [0, 1) 의 범위에서 난수 10개 생성 후 1차원 배열로 만듦 sample(x, Weights(weights), n) </Code>
을 하면 된다.
마지막으로 비복원 추출을 원하면 <Code:Julia> using StatsBase
x = 1:10; weights = rand(10); # [0, 1) 의 범위에서 난수 10개 생성 후 1차원 배열로 만듦 sample(x, replace = false) </Code> 이렇게 replace = false 를 넣어주면 된다.