[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이
inner-game.tistory.com

줄리아 소개
안녕하세요 세상
변수
기본 연산자
산술 연산자
숫자 비교
부울 연산자
비트 연산자 ⁽⁺⁾
운영자 업데이트
유형 시스템
유형
기타 일반적인 숫자 유형
--무리수
--유리수
--복소수
매개변수 합성 유형
유형 계층 구조
벡터
범위
--모으다
--사용자 정의 단계 크기
제어 흐름
조건부 평가
루프
--예비 출구
--반복 건너뛰기
기능
여러 반환 값
인수 유형 선언
함수는 일급 객체입니다
고차 함수
선택적 인수
키워드 인수
익명 함수
함수 구성
--파이프
--합성 연산자 ⁽⁺⁾
다중 발송
이해력
방송
추가 자료
화면에 "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 와 같은 웹사이트가 유용할 수 있습니다.
경고: 큰 힘에는 큰 책임이 따릅니다. 다른 사람과 상호 작용해야 하는 함수 이름과 키워드 인수에는 유니코드 변수를 사용하지 않도록 하세요. 유니코드 변수는 수학적 규칙이 존재하는 환경에서 내부적으로 사용될 때 가장 유용합니다. 예를 들어, 코드 내부에서 특정 데이터의 공분산 행렬을 변수에 할당 Σ하고 평균을 변수에 할당할 수 있습니다 μ.

표현이름설명+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)

표현이름!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 문을 작성하는 데에도 사용할 수 있습니다!

이러한 내용은 머신 러닝에서 거의 사용되지 않으므로 완전성을 위해 요약하겠습니다.표현이름~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(sqrt ∘ sum)(1:10) 함수는 변수처럼 사용될 수 있다는 것을 기억하세요.sqrt_of_sum
sqrt ∘ sum1sqrt_of_sum = sqrt ∘ sum # 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:1559 • Base.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강에서 더 자세히 다루겠습니다.

치트 시트:
다른 언어와의 주목할만한 차이점:
• R과의 차이점
다른:
• 줄리아 문서
• 공식 학습 자료
• 성능 팁
팁 강좌 웹사이트에서 이 노트북을 보고 계신다면 Ctrl + click링크가 필요할 수 있습니다. 또는 독립형 노트북을 사용하세요.
? 마크(쉘의 Help기능) 나 Live docs를 잘 사용하자
apopo? methos? methodwith? # 추가 정리 필요
@which # 파일의 위치를 알려줌
@edit # 디폴트 에디터에서 열기
@less #

이전 강의
[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