줄리아의 find 함수들
개요
줄리아의 기본 내장 함수들로써 알면 알수록 유용하다. 거두절미하고 예시를 보며 익히자.
코드
x = [3, 7, 4, 5, 10, 3, 12, 3, 2, 4]
argmin(x)
argmax(x)
findmin(x)
findmax(x)
extrema(x)
findfirst(x .== 3)
findlast(x .== 3)
findall(x .== 3)
findnext(x .== 3, 5)
findprev(x .== 3, 5)
최적해 argmin()
,argmax()
,findmin()
,findmax()
,extrema()
최적해를 찾는다.
x = [3, 7, 4, 5, 10, 3, 12, 3, 2, 4]
julia> argmin(x)
9
julia> argmax(x)
7
y = [7, 8, 9, 9, 7, 9]
julia> argmax(y)
3
julia> findall(y.==maximum(y))
3-element Vector{Int64}:
3
4
6
argmin()
,argmax()
는 그냥 정확히 최적해, 즉 값이 가장 크고 작은 곳의 인덱스를 리턴한다. 그러한 인덱스가 여러개라면 가장 작은 것을 리턴한다. 그러니까 사실은 argmax(x)
$= \min(\argmax(x))$이다. 진짜 $\argmax$는 maximum()
과 아래의 findall()
함수와 같이 사용하면 된다.
x = [3, 7, 4, 5, 10, 3, 12, 3, 2, 4]
julia> findmin(x)
(2, 9)
julia> findmax(x)
(12, 7)
findmin()
,findmax()
는 최적해와 더불어 그 값까지 리턴한다.
x = [3, 7, 4, 5, 10, 3, 12, 3, 2, 4]
julia> extrema(x)
(2, 12)
참고로 extrema()
인덱스가 아니라 그 값들까지만 리턴한다. 이는 R에서의 range()
함수와 같다1.
가장 처음/마지막으로 조건 만족한 인덱스 findfirst()
, findlast()
x = [3, 7, 4, 5, 10, 3, 12, 3, 2, 4]
julia> findfirst(x .== 3)
1
julia> findlast(x .== 3)
8
3
이 있는 첫 인덱스와 마지막 인덱스를 찾았다. 배열의 형태가 대략적으로 예상이 갈 경우 이들을 통해 코드 속도를 개선시킬 수 있을 것이다.
조건을 만족한 모든 인덱스 findall()
x = [3, 7, 4, 5, 10, 3, 12, 3, 2, 4]
julia> findall(x .== 3)
3-element Vector{Int64}:
1
6
8
막 쓰기 가장 편하고, 일반적인 프로그래밍에서 가장 쓸모있는 함수다. maximum()
, minimum()
과 같이 쓰면 모든 $\text{argmin}
조건을 만족한 특정 범위의 인덱스 findnext()
, findprev()
julia> findnext(x .== 3, 5)
6
julia> findprev(x .== 3, 5)
1
앞뒤로 어느정도는 예외로 치고 탐색해야할 때도 있다. 예를 들어 배열의 첫 원소와 같은 원소를 찾을때 findall()
을 써버리면 그 첫원소도 찾아지기 때문에 번거로울 수 있다.
환경
- OS: Windows
- julia: v1.7.0