logo

줄리아의 find 함수들 📂줄리아

줄리아의 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