Julia Language 프로그래밍 언어 기본 문법 정리

프로그래밍 언어인 Julia Language의 기본 문법에 대한 글이다.

Julia

>

Julia는 MIT에서 개발한 언어로, 2012년에 초소리를 개발하는 Twolangauge problem Performance(fortan, c, asm) vs Productivity(python, ruby, matlab) vs Generality, 이러한 문제를 해결하기 위해 Julia를 만드는 like pyton, felike like like like like like like는 Culia만큼 빠른

>

Julia는 R, Matlab, Python 포함 highlevel로 수치계산하기 쉽고 일반 범용 목적의 프로그래밍도 지원항메타프로그래밍이 가능한 썰매(macros, multiple dispatch) 수치해석(Numerical Analysis), 최적화(Optimization) 문재 등 고성능 수학적 계산처리를 주로 품 index 숫자가 1부터 시작하여 Pyton Sule ‘ Jule; Jule; : Jule; Jule; Juleulia를 활용하는 Parallel Supercomputing for Astronomy 세부 사항이 본인의 앵무새를 사용하는 회사, 2018년 기준으로 최근에는 더 많은 듯

>

Julia 설치 Mac OS 기준 brew cask install julia 터미널에서 Julia 입력 후 아래와 같은 예가 나타나면 성공

>

Jupyter Notebook에서 Julia 사용 I Julia 사용 터미널에서 Julia를 입력하고 Julia prompt로 이동 후 아래 명령어 입력 ENV[“PYTHON”] = “ENV[“JUPYTER”] I Julia 설치(Julia Prompt에서 실행) using Pkg.add(“I Julia”) I Julia 실행(Julia Prompt에서 실행) using I Julia notebook() 방금 익숙한 Jupyter Notebook이 보이고 Julia 커널을 사용할 수 있게 된다. 첫 실행 이후에는 Jupyter Notebook에서 실행해도 줄리아 커널이 보입니다.

>

패키지 설치 패키지 Import는 using 사용 Pkg를 사용하여 패키지 설치 usisg Pkg. add(“Package Name”)

기본적인 문법함수의 Document를 보고싶을 경우 함수 앞에 ?를 붙인다? println

>

셸 명령어를 사용하고 싶은 경우; 앞에 붙입니다; lsprint println() 사용 Assert_assert 식을 쓴다. 파이송에서 asserta=1, 이런 생각인데 골뱅이만 추가

Variable type 확인하는 type of()의 사용 타입 변환은 파이슨과 같이 float(365)로 할 수도 있고 parse(Float 64, “365”)로 할 수도 있다.

>

String ”’과인”’을 사용한 후자의 경우 문자열 내에서 따옴표를 사용할 수 있으며, 전자는 불가능(Error 생성)”은 character로 string이 아닌 ‘Here, we getan ‘error’ because it’s ambiguous where this string ends”Look, Mom, no’와 같이 기호값을 흘려 String $name this this thername therf(‘s therfe)이다.rs+num_toes)digits in all!!”) String Concatenation string끼리 맞출 경우에는 string()을 사용s3=”How many cats”; s4=”istoo many cats?”; =10 string(s3, s4) string(“I don’t know, but”, , “istoo few.”) String 반복 Pyton에서는 “hi”*100과 같이 했지만, Julia에서는 “hi”×100으로 가능

Data Structures Tuple Tuple은 발생하고 바꿀 수 없는()에서 만드는 순서가 지정된 요소를 모아서 튜프할 수 있다 my favoriteanimals = (“penguins”, “cats”, “sugargliders”) myfavoriteanimals[1] Named Tuples 각각의 요소가 이름이 있는 Tuplemy favoriteanimals = “pals mals mals mats = . key-pair 존재 Dict()로 하고,=>를 사용하는 myphonebook=Dict(“Jenny”=”867-5309″,”Ghostbusters”=”555-2368”) myphonebook[“상술한 가격이므로”Aenny”]myphonebook[“=”=555-FILK”pop!를 사용하면 값이 본인 옴(상술한 내용)과 달리, “신규 표시가 없는 것과는 다른 방향이다. = [‘Ted’, ‘Robyn’, ‘Barney’, ‘Lily’, ‘Marshall’] mixture = [1, 2, 3 ‘Ted’, ‘Robyn’] push!와 pop! 사용가능 NDArray도 발생가능 numbers = [1,2,3],[4,7,9] rand(4,3)복사는 길이의 합계는 sumgrag()의 사용가능( )

Loopswhile loops와 for loops가 있다: 모두 end를 사용할 필요 while loops 사용방식 while *condition**loop body*end 예: indent에 둔감함 n=0while n Julia 스타일[xin 1:10, yin 2:5, jin 1:1:1 in ji, jin

Conditionalsif문if*condition1**option1*elseif*condition2**option2*else*option3*endfizbuzz예시醫는 AND를 의미하는 험퍼.센트는 과임머지를 의미하는 N=15if (N파.센트3=0)+ (N파.센트5=0)+means”AND”; 파.센트computes the remainder after division println (“Fi_Buz”)elseif N파.센트3 == 0 println(‘Fiq’) elseifN 파.세인트5 = 0 println(‘Buq’) else println (N) end ternary operators (삼항연산): 신기함 a? b : c 이것은 아래와 동의어다 ifabelse cend x=10y = 5ifx >yxelseyend(x >y)? x : yshort-circuit evaluation brintlue true rintlue(‘que printlue’ rintrintlue print는 or를 의미하는 true + println(‘hi’) false + println(‘hi’)

Functions 주요 Topic 함수를 정의하는 노하우 Duck-typing 하는 노하우: 타입을 미리 정의하는 것이 아니라 실행되었을 때 타입을 정의. 덕타이핑이란? 글 참고 Mutating vs non-mutating function Some higher order functions 함수정의 function sayhi(name) println(‘Hi @name, it’s great to see you!end function f(x) x_2 end 한 줄로 할 수도 있다. integer!), foo(3, 4), anonymous(익명), 함수:=를 사용해 결과를 낸다. Tuple도 사용가능 sayhi3 = name -> println(“Hi @name, it’s great to see you!”) f3 = x -> x + 2 sayhi4 = (firstname, lastname, lastname) -> println (‘Hi firstname, lastname, it’s greate to see you!’) Duck-July Actory 모든 입산은 (37)에 상당하는 일이 발생할 것으로 예측 (3) f (v) Mutating vs non-mutating functions!를 붙이는 차이 sort는 원본 데이터는 변하지 않지만, sort!는 변함없다. 마치 pandas에서 replace=True가 기본적으로 들어간 것이! 붙인 듯한 느낌 v=[3, 5, 2]sort(v) vsort! (v) vSome higherorderfunctions(고차함수) map 해당 함수를 하달한 데이터의 모든 요소에 적용하는 map(f, [1, 2, 3])=[f(1), f(3)] 이렇게 되는 map(x->x-3), [1, 3] incix2, fastro2, [3]의 함수2, [3](ci-3)의 함수2, [3](ci-3)이다. | A_2 = A*A 행렬적 f. (A) | 각 요소의 제곱 아래의 두 코드는 동일한 결과가 본인 한편 broadcast (x-> x + 2 *f(x) / x, A. + 2. * f. (A) / A. + 2

Package ; 사용 가능한 패키지를 확인할 수 있는 sound 패키지 설치(Pkg: 패키지 관리자) using Pkg. add(“Example”) 패키지 사용 using” package name” using을 하면 그 안에 있는 함수가 사용될 수 있는 soundPalette를 사용하는 예 Pkg. ad(“Colors”)이다. using Colors palette = distinguishable_colors (100) rand (palette, 3, 3)

>

Plotting 그래프를 그리는 방법은 정말 다양함(Py Plot을 부를 수도 있고 Plots를 사용할 수도 있음) Plots는 다양한 백엔드를 지원하지만 GR과 Unicode Plots를 사용해 볼 계획 Plots Backent 참고 gr을 빌드할 때 너희가 오래 걸려 링크를 찾는 Using Plots 때 Permission Eror가 일어서서 Py Plot을 사용하는 import Plots) using Plots globaltemperatures = [14.4] numpirates = [45000, 2000, 15000, 5000, 400, 17]; gr() plot(numpirates, globaltemperatures, labelatures! (“label) epopulation onglobal warming”) xflip! ( Pkg.add(“Py Plot”) using Plot globaltemperatures = [14.4, 14.5, 14.8, 15.2, 15.5, 15.8] numpirates = [45000, 200, 500, 400, 17] plot(numpirates, gabatelumberates) [4,000, proates] (‘ Temperature (C)’) title (‘Influence of pirate population onglobal warming’)

>

Multiple Dispatch는 아마 생소한 개념. 위키백과 참고함수의 이 유형에 따라 다른 함수 호출 foo(x:String, y:String)=println(“Myinputs x and yare both strings!”), foo( “hello”, “hi!”), foo(3, 4), + Method Error: nomatching foo(: Int64), foo(4): footysynethod Eror: 2개분의 함수에 대한 함수 객체를 의미하는 methods(foo)>2methods for generic function foo:>foo(x::Int64, y:Int64) in Main at In[8]:1>foo(x:String, y:String) in Main at In[5]:1foo(x:Number, yunper), inpring(pring):String):String(pring):String(pring):3.(x:Float 64, y:Float 64) in Base float 95bbbbb, bg bbget , bbbget bb

Dataframe 데이터를 조작하기 위해 Dataframes.jl활용Pandas와 평등한 느낌importPkg;Pkg. add(“DataFrames”) using DataFramesusing DataFramesdf = DataFrame(A = 1:4, B = [“M”, “F”, “M”)df.col 더욱이 df[!, col]을 통해 열에 직접 접근 가능 후자는 열의 이름을 변수로 전달할 수 있어 유용하다. 열의 이름은 Symbol(‘col’)names(df)로 이름을 확인할 수 있는 df[!,:col]은 복사하지 않고 원본을 컨트롤하며, df[:col]는 복사할 Dataframe을 만들어 일일이 붙이는 것도 가능(Column끼리)df=DataFrame()df.A=1:8df.B=[M], ‘F’, ‘M’, ‘M’

>

Row끼리 맞추기 : push! 사용df = DataFrame (A = Int [], B = String [ ] push! (df, (1, “M”) push! (df, [2, “N”) push! (df, Dict (: B= > ‘F’, : A3)

>

보존하기 위한 using Pkg Pkg. add(“CSV”) using CSV CSV.write(“dataframe.csv”, df) Filtering: Pandas와 느껴 대등한 점을 추가한다(각 요소별 연산): .> in. 등df = DataFrame (A) 1:2:1000, B = repeat (1:10, inner= (50), C=1:500) df[df.A.], Des(A.)

>

Aggregate: aggregate(df, 연산)df=DataFrame(A=1:4, B=4.0:-1.0)aggregate(df, sum)aggregate(df, [sum, prod])

>

특정 값을 변경하는 df.A[1]=10CSV Readusing Pkg Pkg.add(“CSV”) using CSV DataFrame(CSV. File(input)) Delimited Files(CSV 읽기) using Delimited Files P, H=readdlm (“programming languages.csv”, header=”true) Joinjoin 인제 안에 kind=inner, : left 등을 사용할 수 있는 것(Dopsv)”, [Dobe=”20o”

>

그 외에도 Split-apply-combine을 위해 by 등을 사용한다.

최적화 라이브러리 Julia Opt 측에 자료 많은 소음 JuMP.jlCVX는 Convex.qlJuMP 예 코드 using JuMP, GLPK_모델 발발 m=Model(with_optimizer(GLPK.Optimizer)) Variable선언variable(m,0_=x1variable(m,x2>=0) variable(m, x3> 목적 m, constra_2 tttra{}(m) ttttttttra{}, 3}, con) 최적화 문제를 해결하는 JuMP. optimize!(m) + Optimal Solution Print println(‘Optimal Solutions:’) println(‘x1 =’, JuMP.value(x1) println(‘x2 =’, JuMP.value(x2) println(‘x3 =’, JuMP.value valuice prints’)

VSCodeExtensionzulia-vscode

Reference 권창현 님의 Julia Programming for Operation Research Julia 공식 Document Intro to Juliatutorial (version 1.0) Github 의문의 강의 Intro to Julia 카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, Bigquery 등을 이야기할 예정이니 관심 있으시면 구독 부탁드립니다. 이 글이 도움이 된다면 추천 클릭을 부탁드립니다. 🙂 ​