Problem Solving with Algorithms

728x90
반응형

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개

 

Julia 프로그래밍 - 언어 및 강의 소개

Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이

inner-game.tistory.com

 

 

 

Julia 프로그래밍

 


줄리아 소개
안녕하세요 세상
변수


기본 연산자
산술 연산자
숫자 비교
부울 연산자
비트 연산자 ⁽⁺⁾
운영자 업데이트

유형 시스템
유형
기타 일반적인 숫자 유형
--무리수
--유리수
--복소수
매개변수 합성 유형
유형 계층 구조
벡터
범위
--모으다
--사용자 정의 단계 크기

제어 흐름
조건부 평가
루프
--예비 출구
--반복 건너뛰기

 

기능
여러 반환 값
인수 유형 선언
함수는 일급 객체입니다
고차 함수
선택적 인수
키워드 인수
익명 함수
함수 구성
--파이프
--합성 연산자 ⁽⁺⁾


다중 발송

 

이해력

 

방송

 

추가 자료

 


 

 

줄리아 소개

안녕하세요 세상

화면에 "Hello world"를 출력해 보겠습니다 .1print("Hello world")

Hello world 우리는 Pluto 노트북 내부에서 작업하고 있었기 때문에 Pluto는 우리가 터미널 스트림( stdout)에 인쇄하는 것을 감지했습니다. 기본적으로 Pluto는 각 셀의 반환 값을 해당 셀 위에 표시합니다. 따라서 반환 값을 수동으로 출력할 필요가 없습니다.

"Hello world"1"Hello world" # outputs are displayed by default1"Hello world"; # add a semicolon to hide them

 

 

변수

변수는 값을 이름에 바인딩합니다.my_var

31my_var = 3another_var

61another_var = 2 * my_var 변수 이름에 유니코드 문자를 사용할 수도 있습니다.α

1.01α = 1.0 *# typed as: \alpha<TAB>*안녕하세요

"Hello"1안녕하세요 = "Hello"🥧

π = 3.1415926535897...1🥧 = pi # typed as: \:pie:<TAB>

 

대부분의 유니코드 기호는 LaTeX 기호의 이름을 따서 지어졌기 때문에 처음으로 기호를 입력하려고 할 때 Detexify 와 같은 웹사이트가 유용할 수 있습니다.

 

 

 경고: 큰 힘에는 큰 책임이 따릅니다. 다른 사람과 상호 작용해야 하는 함수 이름과 키워드 인수에는 유니코드 변수를 사용하지 않도록 하세요. 유니코드 변수는 수학적 규칙이 존재하는 환경에서 내부적으로 사용될 때 가장 유용합니다. 예를 들어, 코드 내부에서 특정 데이터의 공분산 행렬을 변수에 할당 Σ하고 평균을 변수에 할당할 수 있습니다 μ.

Julia 변수

 

 

 

 

 

기본 연산자

산술 연산자

표현이름설명+x단항 플러스신원 연산-x단항 마이너스값을 덧셈 역수에 매핑합니다.x + y이진 플러스추가를 수행한다x - y이진 마이너스뺄셈을 수행한다x * y타임스곱셈을 수행한다x / y나누다나누기를 수행하다x ÷ y정수 나누기x / y, 정수로 잘림x \\ y역분할~와 동등하다y / xx ^ y힘x제곱 하다yx % y나머지~와 동등하다rem(x,y) 다음 중 일부를 시연해 보겠습니다.

711 + 2 * 3힘과 뿌리

2515^2

true1sqrt(2) == 2^0.5층별 구분

31div(10, 3) ÷이는 다음과 같이 입력할 수 있는 것과 동일합니다 \\div<TAB>.

3110 ÷ 3나머지

215 % 3 이것은 다음과 같습니다

21rem(5, 3) 음수의 경우 나머지는 다음과 같습니다.모듈로:

-21rem(-5, 3)

11mod(-5, 3)

숫자 비교

연산자이름==평등!=,≠불평등<보다 작음<=,≤이하>보다 크다>=,≥이상 간단한 예를 들어보겠습니다.

false14 <= 2 또 다른 유용한 도구는 중위 표기법 ( ) isapprox에 사용할 수 있는 함수 입니다 .≈\\approx<TAB>

true11 ≈ 1.00000001

true1isapprox(1, 1.00000001)

Julia 산술 연산자


부울 연산자

표현이름!x부정x && y단락 및x || y단락 또는 이 노트북에서 변수를 바꿔가며 실험해 보세요. 어떤 결과가 나올 것으로 예상하시나요? 부정부터 시작하여 실제로 이것이 어떻게 나타나는지 살펴보겠습니다.

true1!false 단락 회로 부울 연산자는 두 가지가 있습니다.

false1true && false # short-circuiting and

true1true || false # short-circuiting or 이것들은 필요한 경우에만 오른쪽을 평가하기 때문에 단락 회로라고 합니다.

false13 < 2 && error("This error will never be thrown because 3 < 2 is already false")

true12 > 1 || print("This will never be printed because 2 > 1 is already true") 짧은 if 문을 작성하는 데에도 사용할 수 있습니다!

Julia 부울 연산자

 


비트 연산자 ⁽⁺⁾

이러한 내용은 머신 러닝에서 거의 사용되지 않으므로 완전성을 위해 요약하겠습니다.표현이름~x비트 단위 notx & y비트 단위 및x | y비트 단위 또는x ⊻ y비트 단위 xor (배타적 or)x ⊼ y비트 단위 nand(not and)x ⊽ y비트 단위 nor (not or)x >>> y논리적 오른쪽 이동x >> y산술 오른쪽 이동x << y논리/산술 왼쪽으로 이동 자세한 내용은 Julia 문서 에서 확인할 수 있습니다 .

 

 

운영자 업데이트

우리가 다룬 대부분의 운영자는 업데이트 버전도 가지고 있습니다.

+= -= *= /= \\= ÷= %= ^= 명왕성의 반응성으로 인해 우리는 begin ... end블록 내부에서 다음을 시연해야 합니다.

2512345begin x = 2 x += 3 # 2 + 3 = 5 x ^= 2 # 5 ^ 2 = 25end 비트 연산에도 다음과 같은 것이 있습니다.

&= |= ⊻= >>>= >>= <<=

 

 

 

 


유형 시스템

유형

Julia의 모든 변수는 타입을 가지고 있습니다. 값이나 변수의 타입은 다음을 사용하여 출력할 수 있습니다 typeof.

String1typeof("Hello World")

Char1typeof('c') 숫자에는 여러 유형이 있습니다.

Int641typeof(1) # Default Int type is Int64

Float641typeof(1.0) # Default Float type is Float64 특정 유형의 숫자를 얻으려면 해당 유형의 생성자를 사용하면 됩니다.

Float321typeof(Float32(1.0)) Float64과학적 표기법을 사용하여 숫자를 정의 할 수도 있습니다 Float32.

Float641typeof(1.0e-2)

Float321typeof(1.0f-2)

 



 

 

 

 

 

기타 일반적인 숫자 유형

무리수

π = 3.1415926535897...1π # \pi<TAB>

ℯ = 2.7182818284590...1 # \euler<TAB>

Irrational{:π}1typeof(π)

 

 

 

 


유리수

정수의 경우그리고, 유리수구문을 사용하여 분수로 표현할 수 있습니다 p//q.r

1//31r = 1//3 # one third

Rational{Int64}1typeof(r) 이렇게 하면 부동 소수점 숫자와 부동 소수점 산술의 유한한 정밀도로 인한 반올림 오류가 방지됩니다.

0.3000000000000000411 / 10 + 2 / 10 # error due to floating-point arithmetic

3//1011//10 + 2//10 # no error! 유리수를 부동 소수점 숫자로 변환할 때 반올림 오류도 발생합니다.

0.33333334f01Float32(r)

 

복소수

c

1.2 + 3.4im1c = 1.2 + 3.4im

ComplexF64 (alias for Complex{Float64})1typeof(c)


매개변수 합성 유형

질문: Rational{Int64}방금 ' 와' 유형을 살펴보았습니다 Complex{Float64}. 이 중괄호는 무슨 뜻인가요? 일부 유형은 다른 유형의 값을 가집니다. 이러한 유형은 사용하는 프로그래밍 언어에 따라 구조체 , 데이터 클래스 또는 복합 유형 이라고 합니다 . Julia는 이러한 복합 유형의 일반적인 구현을 허용합니다. 이러한 소위 매개변수 복합 유형은 중괄호 안에 유형 매개변수를 사용하여 표시됩니다 .{T} • Rational{Int64}는 분모와 모수 로 표현되는 유리수입니다 Int64. 다른 Integer유형의 유리수도 정의할 수 있습니다. • Complex{Float64}실수부와 허수부로 표현되는 복소수입니다 Float64. 다른 유형의 복소수도 정의할 수 있습니다 Real. 일부 유형에는 여러 유형 매개변수가 있습니다. Tuple유형 (둥근 괄호) 이 그 예입니다.my_tuple

1

2.0

"Foo"1my_tuple = (1, 2.0, "Foo")

Tuple{Int64, Float64, String}1typeof(my_tuple)

 

4강에서는 우리만의 유형을 정의하는 방법을 배워보겠습니다!

 

 

 

 

유형 계층 구조

Julia의 유형은 유형 계층 구조의 일부입니다. • 부모 유형은 다음을 사용하여 표시할 수 있습니다.supertype • 하위 유형은 다음을 사용하여 표시할 수 있습니다.subtypes

AbstractFloat1supertype(Float64)

BigFloat

Float16

Float32

Float641subtypes(AbstractFloat) print_type_tree이 노트북에는 유형 계층 구조를 보여주는 함수가 준비되었습니다 .1print_type_tree(Number)

Number ├─ MultiplicativeInverse │ ├─ SignedMultiplicativeInverse │ └─ UnsignedMultiplicativeInverse ├─ Complex └─ Real ├─ AbstractFloat │ ├─ BigFloat │ ├─ Float16 │ ├─ Float32 │ └─ Float64 ├─ AbstractIrrational │ └─ Irrational ├─ FixedPoint │ ├─ Fixed │ └─ Normed ├─ Integer │ ├─ Bool │ ├─ Signed │ │ ├─ BigInt │ │ ├─ Int128 │ │ ├─ Int16 │ │ ├─ Int32 │ │ ├─ Int64 │ │ └─ Int8 │ └─ Unsigned │ ├─ UInt128 │ ├─ UInt16 │ ├─ UInt32 │ ├─ UInt64 │ └─ UInt8 └─ Rational

print_type_tree (generic function with 1 method) Julia에서는 유형 계층 구조의 리프 노드만 인스턴스화할 수 있습니다. 다른 모든 유형은 일반적으로 접두사로 표시되는 "추상 유형"입니다 Abstract.

 

 

 

벡터

Julia에서 벡터는 대괄호 안에 쉼표로 구분된 값으로 정의됩니다.v1

1

2

3

4

51v1 = [1, 2, 3, 4, 5]v2

"Adrian"

"Klaus-Robert"1v2 = ["Adrian", "Klaus-Robert"] 벡터는 또한 매개변수 유형입니다.

Vector{Int64} (alias for Array{Int64, 1})1typeof(v1)

Vector{String} (alias for Array{String, 1})1typeof(v2) 벡터와 배열에 대해서는 2강에서 더 자세히 다루겠습니다.



 

 

범위

구문을 사용하면 start:stop범위를 정의할 수 있습니다.my_range

1:10001my_range = 1:1000

UnitRange{Int64}1typeof(my_range)

 

 

 

 

 

 

모으다

범위는 시퀀스를 구성하는 데 필요한 정보만 포함하고 전체 데이터는 포함하지 않는다는 의미에서 "게으른" 범위입니다. 를 사용하여 collect전체 시퀀스를 벡터로 작성합니다.

1

2

3

...

998

999

10001collect(my_range) 다음을 사용하여 메모리의 차이를 검사할 수 있습니다 sizeof.

161sizeof(my_range) # 2 Int64s (start and stop) => 128 bit => 16 bytes

80001sizeof(collect(my_range)) # 1000 Int64s => 64000 bit => 8000 bytes

 

 

 

사용자 정의 단계 크기

또한 , 다음 숫자 사이의 단계 크기를 나타내는 start:step:stop구문 을 사용하여 사용자 정의 단계 크기로 범위를 구성할 수 있습니다 .step

1

3

5

7

91collect(1:2:10) # range from 1 to 10 with a step size of 2 범위는 음수 단계 크기도 지원합니다.

2.0

1.8

1.6

1.4

1.2

1.01collect(2:-0.2:1) 더 많은 제어가 필요한 경우 이 range함수를 사용할 수 있습니다. 이 함수는 start, stop, step의 세 가지 인수를 지원합니다 length.

1.0

1.11111

1.22222

1.33333

1.44444

1.55556

1.66667

1.77778

1.88889

2.01collect(range(1, 2; length=10))

 

 

 


 

제어 흐름

조건부 평가

기본적인 if-else 문은 다른 언어의 문과 일치합니다.a

11a = 1 *# Play with the values of a & b!*b

11b = 1

"a is equal to b"1234567if a < b "a is less than b"elseif a > b "a is greater than b"else "a is equal to b"end &&이전에 소개했듯이 및 를 사용한 단락 평가는 ||단락 명령문의 대안으로 사용될 수 있습니다 if.

false1a > b && "a is greater than b" 삼항 연산자는 또한 명령문 ?:과 관련이 있습니다.if-else 예를 들어 다음과 같은 형식을 취합니다 condition ? return_if_true : return_if_false.

"a is greater or equal b"1a >= b ? "a is greater or equal b" : "a is less than b"

 

 

루프

Julia는 클래식 for및 while루프를 지원합니다. 범위와 벡터 등 다양한 유형을 반복할 수 있습니다.123for i in 1:5 @info iend

1

2

3

4

5123for name in ["Adrian", "Klaus-Robert"] @info nameend

Adrian

Klaus-Robert1234567begin i = 1 while i <= 5 @info i i += 1 endend # begin ... end block is only needed for Pluto

1

2

3

4

5

함수 대신 println()logging 매크로를 사용했습니다 @info. i이 매크로는 오른쪽에 메시지 로그를 생성하며, Pluto Notebooks에서는 좀 더 보기 좋습니다. 여기서 로그에 기록되는 메시지는 정수 또는 문자열 값입니다 name.

 

 

예비 출구

루프 break를 종료하려면 다음 을 사용할 수 있습니다 .forwhile1234for i in 1:100000 i > 5 && break @info iend

1

2

3

4

5

 


반복 건너뛰기

continue반복을 건너뛰려면 다음을 사용할 수 있습니다 .12345for i in 1:5 # skip printing even numbers i % 2 == 0 && continue @info iend

1

3

5


함수

Julia의 함수는 블록으로 정의됩니다 function ... end.

my_add (generic function with 1 method)123function my_add(x, y) return x + yend

51my_add(2, 3) 키워드 return를 생략할 수 있으며, 생략하면 마지막으로 평가된 표현식의 값이 반환됩니다. 함수는 보다 간결한 "할당 형식"으로 정의될 수도 있습니다.

my_add_2 (generic function with 1 method)1my_add_2(x, y) = x + y

51my_add_2(2, 3)

 

 


여러 반환 값

함수는 쉼표로 구분된 여러 값을 반환할 수 있습니다.

foo (generic function with 1 method)123function foo(x) return x, x + 1end

5

61x1, x2 = foo(5) Julia는 일반적으로 함수 밖에서도 쉽게 구조 분해를 수행할 수 있도록 허용합니다. 몇 가지 예를 살펴보겠습니다.

1:31c1, c2, c3 = 1:3

21c2 이는 for-loop에서도 사용할 수 있습니다.123for (i, c) in [(1, 'a'), (2, 'b'), (3, 'c')] @info "Integer $i and Character $c"end

Integer 1 and Character a

Integer 2 and Character b

Integer 3 and Character c 그리고 구조 분해는 일반적으로 재귀적으로도 작동합니다.nested_inputs

1

'a'

1.11

2

'b'

2.22

3

'c'

3.331nested_inputs = [(1, ('a', 1.11)), (2, ('b', 2.22)), (3, ('c', 3.33))]123for (i, (c, f)) in nested_inputs @info "Integer $i, Character $c and Float $f"end

Integer 1, Character a and Float 1.11

Integer 2, Character b and Float 2.22

Integer 3, Character c and Float 3.33

 

 

 


인수 유형 선언

허용되는 인수 유형은 함수 인수 내에서 .를 사용하여 선언할 수 있습니다 ::TypeName. 다음 함수는 .의 하위 유형에서만 작동합니다 Integer.

my_factorial (generic function with 1 method)12345function my_factorial(n::Integer) n >= 0 || error("n must be non-negative") n == 0 && return 1 return n * my_factorial(n - 1)end

241my_factorial(4) # Default Int = Int64

241my_factorial(0x04) *# 0x04 == UInt8(4)*Error messageMethodError: my_factorial(::Float64)과 일치하는 메서드가 없습니다.

가장 가까운 후보는 다음과 같습니다. my_factorial( ::정수 ) @ Main.var"작업공간#4" ~/work/julia-ml-course/julia-ml-course/강의/ L1_Basics_1.jl#==#16b013cd-5ac2-4731-8899-552c6bff5dfa:1**Show stack trace...**1my_factorial(4.0) # errors on Floats!

 

 

함수는 일급 객체입니다

Julia에서 함수는 일급 객체my_factorial 이며 변수처럼 사용할 수 있습니다. 이전에 정의한 함수에서 이를 확인해 보겠습니다 .my_factorial_2

my_factorial (generic function with 1 method)1my_factorial_2 = my_factorial

241my_factorial_2(4) typeof(function_name)함수는 부모 유형이 있는 유형입니다 Function.

typeof(my_factorial) (singleton type of function my_factorial, subtype of Function)1typeof(my_factorial)

 

 

 

고차 함수

함수는 함수를 반환할 수도 있습니다.

make_multiplier (generic function with 1 method)123456function make_multiplier(x) function times_x(y) return x * y end return times_xendtimes_two

(::Main.var"workspace#4".var"#times_x#1"{Int64}) (generic function with 1 method)1times_two = make_multiplier(2)

161times_two(8)

 

 

 

선택적 인수

선택적 인수는 함수 인수에 대한 합리적인 기본값을 구현하는 방법을 제공합니다. 일반적인 것을 구현해보자-노름 함수

기본값으로 설정됨-norm 사용:

my_norm (generic function with 2 methods)123function my_norm(xs, p=2) return sum(xs .^ p)^(1 / p)end

3.74165738677394131my_norm([1, 2, 3])

3.74165738677394131my_norm([1, 2, 3], 2)

6.01my_norm([1, 2, 3], 1)

 

 

 

 

키워드 인수

처음에는 Julia가 선택적 인수와 키워드 인수를 모두 제공한다는 점이 혼란스러울 수 있습니다. 이전 함수를 키워드 인수를 사용하여 다시 구현하여 차이점을 확인해 보겠습니다. 키워드 인수는 ;함수 시그니처에서 세미콜론을 사용하여 (선택적) 인수와 구분합니다.

my_norm_kw (generic function with 1 method)123function my_norm_kw(xs; p=2) return sum(xs .^ p)^(1 / p)end

3.74165738677394131my_norm_kw([1, 2, 3]) 키워드 인수 이름을 명시적으로 지정하지 않고 함수를 호출하면 오류가 발생합니다.Error messageMethodError: my_norm_kw(::Vector{Int64}, ::Int64)와 일치하는 메서드가 없습니다.

가장 가까운 후보는 다음과 같습니다. my_norm_kw(::Any; p) @ Main.var"작업공간#4" ~/work/julia-ml-course/julia-ml-course/강의/ L1_Basics_1.jl#==#52cf9d22-08a5-4937-b81c-d9ced5f1a584:1**Show stack trace...**1my_norm_kw([1, 2, 3], 1) # errors since keyword is missing!

6.01my_norm_kw([1, 2, 3]; p=1) # works 일반적으로 키워드 인수는 동작이나 "설정"이 많은 함수에 사용됩니다. 각 키워드 인수에 이름으로 레이블이 지정되어 함수 호출을 더 쉽게 읽을 수 있습니다. 이 my_norm함수는 선택적 인수가 키워드 인수보다 더 적합한 예시입니다. 이 예시의 목적은 두 인수 유형의 차이점을 강조하는 것이었습니다. 키워드 인수가 선택적 인수보다 더 적합한 한 가지 예는 사용자가 선 색상, 너비, 스타일 등 여러 옵션을 설정할 수 있는 플로팅 함수입니다.

function plot(x, y; style="solid", width=1, color="black") # ... end

 

 


익명 함수

함수는 다음 구문을 사용하여 이름을 지정하지 않고도 "익명으로" 생성될 수 있습니다.

(inputs) -> outputs 이는 "람다 함수"라고도 합니다. 이러한 함수는 특히 다른 함수를 입력으로 받는 함수(예: map및 filter)에 유용합니다. map함수를 받아서 배열의 각 값에 적용합니다. 1부터 5까지의 모든 숫자에 제곱을 하고 1을 더하여 이를 확인해 보겠습니다.

2

5

10

17

261map(x -> x^2 + 1, 1:5) filter1에서 10 사이의 숫자 중 3으로 나누어 떨어지는 숫자 도 다음과 같이 구할 수 있습니다 .

3

6

91filter(x -> x % 3 == 0, 1:10) 익명 함수는 구문을 사용하여 여러 개의 입력을 가질 수도 있습니다 (x, y) -> 2x + y.

 

 

 

 


함수 구성

f두 함수 와 를 합성해 보겠습니다 g. 가장 일반적인 방법은 다음을 호출하는 것입니다 g(f(x)).

7.4161984870956631sqrt(sum(1:10))

 

 

 

파이프

파이프 연산자를 사용하여 |>함수를 연결할 수도 있습니다. 파이프를 사용하면 g(f(x))다음과 같이 작성할 수 있습니다 f(x) |> g.

7.4161984870956631sum(1:10) |> sqrt

 

합성 연산자 ⁽⁺⁾

∘( )를 사용하여 함수를 합성할 수도 있습니다 \\circ<TAB>. 이는 함수 합성에 대한 수학적 표기법과 일치합니다.

7.4161984870956631(sqrtsum)(1:10) 함수는 변수처럼 사용될 수 있다는 것을 기억하세요.sqrt_of_sum

sqrt ∘ sum1sqrt_of_sum = sqrtsum # h = g ∘ f

7.4161984870956631sqrt_of_sum(1:10)

 



 

 

다중 발송

입력 유형에 따라 함수를 다르게 구현하고 싶을 때가 많습니다. 예를 들어, 함수는 와 가 실수인지, 복소수인지, 심지어 행렬인지 multiply(a, b)에 따라 서로 다른 구현이 필요합니다 . Julia에서는 함수의 각 구현을 메서드 라고 합니다 .ab Julia는 함수의 모든 입력 유형 에 따라 적용할 올바른 메서드를 자동으로 선택합니다 . 이를 다중 디스패치 라고 합니다 .

test_dispatch (generic function with 1 method)1test_dispatch(x) = "General case: $(typeof(x)), x=$(x)"

test_dispatch (generic function with 2 methods)1test_dispatch(x::Float64) = "Special case: Float64, x=$(x)"

"General case: Int64, x=2"1test_dispatch(2)

"Special case: Float64, x=2.0"1test_dispatch(2.0)

"General case: String, x=Hello world"1test_dispatch("Hello world")

 

함수의 방법은 예를 들어 사인 함수의 경우 f를 사용하여 나타낼 수 있습니다 .

 

methods(f)# [90mBase [39m에서 일반 함수 sin 에 대한 14가지 방법 :

• base.MathConstants의 sin(:: Irrational{:π} ) (mathconstants.jl:146)Base.MPFR의 mpfr.jl:801 에 있는 sin(x:: BigFloat ) • base.Math의 sin(a:: Float16 )은 math.jl:1558 에 있습니다. • Base.Math의 sin(a:: ComplexF16 ) at math.jl:1559Base.Math의 math.jl:1580 에서 sin(:: Missing )이 발견되었습니다. • /opt/hostedtoolcache/julia/1.10.10/x64/share/julia/stdlib/v1.10/LinearAlgebra/src/diagonal.jl:754 의 LinearAlgebra에서 sin(D:: LinearAlgebra.Diagonal )special/trig.jl:29 의 Base.Math에서 T<:Union{Float32, Float64}인 sin(x:: T ) • base.Math의 sin(x:: Real ) at math.jl:1575 • /opt/hostedtoolcache/julia/1.10.10/x64/share/julia/stdlib/v1.10/LinearAlgebra/src/symmetric.jl:687 의 LinearAlgebra에서 sin(A:: LinearAlgebra.Hermitian{var"#s127", S} where {var"#s127"<:Complex, S<:(AbstractMatrix{<:var"#s127"})} ) • /opt/hostedtoolcache/julia/1.10.10/x64/share/julia/stdlib/v1.10/LinearAlgebra/src/symmetric.jl:683 의 LinearAlgebra에서 sin(A:: Union{LinearAlgebra.Hermitian{var"#s999", S}, LinearAlgebra.Symmetric{var"#s999", S}} • /opt/hostedtoolcache/julia/1.10.10/x64/share/julia/stdlib/v1.10/LinearAlgebra/src/dense.jl:979 의 LinearAlgebra에서 sin(A:: AbstractMatrix{<:Complex} ) • /opt/hostedtoolcache/julia/1.10.10/x64/share/julia/stdlib/v1.10/LinearAlgebra/src/dense.jl:972 의 LinearAlgebra에서 sin(A:: AbstractMatrix{<:Real} ) • sin(z:: Complex{T} ) 여기서 T는 complex.jl:885 의 Base에 있습니다 . • /opt/hostedtoolcache/julia/1.10.10/x64/share/julia/stdlib/v1.10/LinearAlgebra/src/uniformscaling.jl:173 의 LinearAlgebra에서 sin(J:: LinearAlgebra.UniformScaling )1methods(sin)

 

 

 

 

 

 

이해력

컴프리헨션은 배열을 정의하는 강력하고 간결한 방법입니다. 구문은 수학의 집합 표기법과 다소 유사합니다.v3

1

4

9

16

25

36

49

64

81

1001v3 = [x^2 for x in 1:10] 추가 필터링 함수를 전달하는 것도 가능합니다. 예를 들어, 1부터 10까지의 모든 짝수의 제곱을 벡터로 변환할 수 있습니다.v4

4

16

36

64

1001v4 = [x^2 for x in 1:10 if iseven(x)]

 

 

방송

모든 함수는 f(A)다음 구문을 사용하여 입력에 요소별로 적용될 수 있습니다 f.(A).test_array

1

2

3

4

51test_array = [1, 2, 3, 4, 5]

0.841471

0.909297

0.14112

-0.756802

-0.9589241sin.(test_array) 이것은 사용자 정의 함수에도 적용됩니다.

add_two (generic function with 1 method)1add_two(x) = x + 2

3

4

5

6

71add_two.(test_array) 오늘 배운 연산자에 대해서도 마찬가지입니다. 연산자 앞에 마침표를 추가하기만 하면 됩니다.

1

4

9

16

251test_array .^ 2

2

4

8

16

3212 .^ test_array 방송에 대해서는 2강에서 더 자세히 다루겠습니다.

 

 

추가 자료

치트 시트:

MATLAB-Python-Julia 치트 시트

줄리아로 가는 빠른 길

 

다른 언어와의 주목할만한 차이점:

파이썬과의 차이점

MATLAB와의 차이점

C/C++와의 차이점

R과의 차이점

Common Lisp와의 차이점

 

다른:

줄리아 문서

공식 학습 자료

성능 팁

 

강좌 웹사이트에서 이 노트북을 보고 계신다면 Ctrl + click링크가 필요할 수 있습니다. 또는 독립형 노트북을 사용하세요.

 

 

 

그 외의 팁들

? 마크(쉘의 Help기능) 나 Live docs를 잘 사용하자

apopo? methos? methodwith? # 추가 정리 필요

@which # 파일의 위치를 알려줌

@edit # 디폴트 에디터에서 열기

@less #

JuliaHub.com

 

 

 

 

이 블로그의 관련 글

이전 강의

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - Julia 설치

 

Julia 프로그래밍 - Julia 설치

이전 글[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필

inner-game.tistory.com

 

 

다음 강의

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 배열 및 선형 대수

 

Julia 프로그래밍 - 배열 및 선형 대수

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항

inner-game.tistory.com

 

 

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 플롯과 데이터 프레임

 

Julia 프로그래밍 - 플롯과 데이터 프레임

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항

inner-game.tistory.com

 

728x90
반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
250x250