본문 바로가기

Programming/Julia Language

05. 컨테이너, 값을 담는 상자(1) - 배열 : Array




Julia Language

 Julia는 수치 연산을 위해 개발된 High Level, High Performance의 동적 프로그래밍 언어이다. 고수준의 컴파일러, 병렬 연산과 많은 수치연산 라이브러리를 지원하고 있다(수치연산, 선형대수, 난수생성, 문자열 가공 등) 비슷한 언어인 Python에 비해 빠른 처리 속도를 보여주어 머신 러닝 등 많은 연산을 필요로 하는 분야에서 사용되고 있다.

Previous Posting

4. 변수와 타입(4) - 복소수 리터럴, 실수 리터럴

배열 : Array

배열은 다차원 혹은 단차원 격자-Grid에 저장된 객체의 모임이다


1. 배열의 초기화

배열의 생성은 아래와 같이 할 수 있다.

In [2]:
arr = [1, 2, 3]  # 1차원 배열, Int 값을 담고 있다
Out[2]:
3-element Array{Int64,1}:
 1
 2
 3
In [5]:
arr = [[1, 2, 3], [2, 3, 4]]  # 1차원 배열을 담고 있는 또 다른 1차원 배열
Out[5]:
2-element Array{Array{Int64,1},1}:
 [1, 2, 3]
 [2, 3, 4]


배열의 타입 형태는 다음과 같다 : Array{원소의 타입, 배열의 차원}

In [6]:
typeof(['a', 'b', 'c'])
Out[6]:
Array{Char,1}
In [8]:
typeof([[1, 2, 3], [2, 3, 4]])  # 원소로서 또 다른 배열을 포함한 배열의 타입은 Array{(담고 있는 배열의 타입), 차원} 이다
Out[8]:
Array{Array{Int64,1},1}


원소의 타입과 개수로 배열을 초기화할 수 있다. 이 때, 값은 쓰레기 값이 들어간다

In [12]:
Array{Int}(3)
Out[12]:
3-element Array{Int64,1}:
 407586352
 407858832
 115547664
In [13]:
Array{Char}(3)
Out[13]:
3-element Array{Char,1}:
 '\ue6a'    
 '\0'       
 '\U6ea9150'


또한, 유사하게 범위를 이용하여 배열을 초기화할 수 있다

In [29]:
[1:7]
Out[29]:
1-element Array{UnitRange{Int64},1}:
 1:7
In [27]:
typeof(1:7)
Out[27]:
UnitRange{Int64}


혹은 []를 이용하여 빈 배열을 생성할 수 있는데, 이 경우 타입을 추론할 수 없게 되어 성능이 하락한다.

In [14]:
arr = []
Out[14]:
0-element Array{Any,1}


따라서 Type[] 등과 같이 원소의 타입을 명시적으로 나타내어 컴파일 성능을 향상시키는 방법이 더욱 효율적이다


2. 배열 관련 함수


① eltype(array) : 원소의 타입을 반환한다

In [2]:
array = Int[3, 2, 4]
eltype(array)
Out[2]:
Int64


② length(array) : 배열의 길이를 반환한다

In [5]:
length(array)
Out[5]:
3


③ fill!(arr, x)과 fill(x, dim) : arr를 x로 채우거나, dim 차원의 x로 채워진 배열을 반환한다

In [8]:
fill!(array, 5)
Out[8]:
3-element Array{Int64,1}:
 5
 5
 5
In [10]:
fill([2, 3], 4)
Out[10]:
4-element Array{Array{Int64,1},1}:
 [2, 3]
 [2, 3]
 [2, 3]
 [2, 3]


④ append!(arr, subarr) : arr 뒤에 subarr을 붙인다

In [12]:
append!(array, [2, 3])
Out[12]:
5-element Array{Int64,1}:
 5
 5
 5
 2
 3


⑤ pop!(arr)와 push!(arr, e) : arr의 맨 마지막 원소를 빼내 반환하거나, e를 맨 뒤에 붙인다

In [15]:
pop!(array)
Out[15]:
3
In [16]:
push!(array, 8)
Out[16]:
5-element Array{Int64,1}:
 5
 5
 5
 2
 8


⑥ shift!(arr)과 unshift!(arr, e) : arr의 맨 앞 원소를 빼내 반환하거나, e를 맨 앞에 붙인다

In [19]:
shift!(array)
Out[19]:
5
In [20]:
unshift!(array, 2)
Out[20]:
5-element Array{Int64,1}:
 2
 5
 5
 2
 8


⑦ splice!(arr, index) : arr의 index 위치의 원소를 빼내 반환한다

In [33]:
arr = [3, 2, 4]
Out[33]:
3-element Array{Int64,1}:
 3
 2
 4
In [34]:
splice!(arr, 2)
Out[34]:
2


⑧ in(e, arr) 혹은 e in arr : arr에 원소 e가 있는지 확인한다

In [35]:
in(1, arr)
Out[35]:
false



Next Post

06. 컨테이너, 값을 담는 상자(2)


Code

본 포스팅에서 사용된 Julia 코드는 이 시리즈의 Github 저장소에서 다운받을 수 있습니다