본문 바로가기
파이썬 데이터분석

파이썬 - numpy.argmax 함수

by 데이터스토리 2024. 2. 13.
반응형

파이썬 numpy 라이브러리의 argmax 함수는 인자로 들어오는 요소에서 최대값을 return 합니다.

 

파이썬 - numpy.argmax 함수
파이썬 - numpy.argmax 함수



1차원 배열 인수에서 최대값 찾기

 

1차원 배열입니다. 여기서 최대값을 찾는 방법을 확인해 보겠습니다.

np.argmax() 하면 결과는 배열의 인덱스 위치를 출력합니다. 배열의 인덱스는 0부터 시작하거든요. 예를 들어 출력값이 "3" 이라면 실제는 4번째 있는 값이 됩니다.

import numpy as np

# 최대값이 여러 개, 처음꺼의 인덱스만 반환

a = np.array([1,5,3,8,2,8])
b = np.array([23,67,12,79,89, 34,67])

print('index= ', np.argmax(a), '/ value= ', a[np.argmax(a)] )
print('index= ', np.argmax(b), '/ value= ', b[np.argmax(b)] )
index=  3 / value=  8
index=  4 / value=  89

 

index = 3 입니다. 그러므로 배열 a의 4번쩨 값인 8이 답이 됩니다.

 

 

 

 



2차원 배열인수에서 최대값 찾기

 

이번에는 2차원 배열에서 최대값을 찾아보겠습니다. 여기서 주의할 점은 2차원을 1차원으로 전환한 후 해당 인덱스 값을 돌려준다는 것입니다. 아래 예제를 보면서 살펴보겠습니다.

 

2차원 배열의 index확인해 보니

# 2차원 배열일 경우

datas = np.array([[23, 56, 12, 78, 26], [23, 67, 11, 34, 89]])

print('index= ', np.argmax(datas) )  
       
# 2차원 배열은 1차원으로 전환 후의 인덱스를 준다.
# 그래서 값이 무엇인지 알려면 2차원 기준의 위치값 변경이 필요하다.
index=  9

 

인덱스가 '9' 로 출력되었습니다. 2차원 배열의 10번째가 최대값이 됩니다. 왜 10번째인가 하면 0번 인덱스를 포함해야 하기 때문입니다. 

 

 


2차원 배열의 진짜 index, value 확인하자

2차원 배열에서 최대값을 구한 결과가 1차원 배열처럼 한개의 인덱스 값 만을 출력했습니다. 이 상황을 2차원에 맞게 조절하여 출력해 보도록 하겠습니다.

 

  • np.reshape함수를 활용하여 행과 열의 수를 파악한다.
  • 배열의 argmax의 index를 열의 수로 나누어 몫과 나머지를 파악한다.
  • 몫은 행의 위치, 나머지는 열의 위치가 된다.
    • "//" : 나눗셈의 몫       (a//b)
    • "%" : 나눗셈의 나머지 (a%b)
print(datas.shape)                  # (2, 5)
print('index= ', np.argmax(datas) ) # 인덱스 확인

# 계산을 해 보면
print('몫: ', 9//5, ' / 나머지: ',9%5)
(2, 5)
index=  9
몫:  1  / 나머지:  4

   

  • 위치는 "몫:  1  / 나머지:  4"  즉   '1행, 4열' 이 최대값의 위치가 됩니다.

 

datas[1,4]

 

89
  •   최대값이 89 이다.

 

이제 식으로 만들어 보겠습니다.

# 식으로 만들면 아래와 같다.

np.argmax(datas) // datas.shape[1], np.argmax(datas) % datas.shape[1]
(1, 4)
  •   (1, 4)에서 "1"은 행의 위치, "4"는 열의 위치입니다.

 

이제는  Function을 만들자 ==> 2차원 배열의 index를 반환하는

# Function 만들기(2차원 배열의 index를 반환)

def argmax_2arr_index(index, columns):
    return index // columns, index % columns


# Function을 사용하기

idx = argmax_2arr_index(np.argmax(datas),datas.shape[1])
print('2차원 배열의 index', idx)    # (1, 4)


# value 찾기

print('argmax Value = ', datas[idx[0], idx[1]])
2차원 배열의 index (1, 4)
argmax Value =  89

 

이렇게 해서 2차원 배열의 argmax 의 값을 찾았습니다.

 

 

 

 

LAB

 

 LAB 입니다. 풀어보세요.

  • data2 에 배열을 정의하고 np.argmax()를 활용하여 최대값을 구하시요.
  • 위에 정의한 함수 argmax_2arr_index() 를 이용하세요.
data2 = np.array([[12,56,23,90,67],
                       [58,67,24,1,34],
                       [67,35,13,98,44]])

 

 
 
<풀이>
# Data 정의
data2 = np.array([[12,56,23,90,67],
                  [58,67,24,1,34],
                  [67,35,13,98,44]])


# 함수 부르기
idx = argmax_2arr_index(np.argmax(data2),data2.shape[1])
print('data2의 index', idx)    # (1, 4)

# value 찾기
print('data2의 argmax Value = ', data2[idx[0], idx[1]])
data2의 index (2, 3)
data2의 argmax Value =  98

 

이상으로 파이썬 argmax 함수에 대해서 알아봤습니다. 처음에는 어려울 수 있지만, 연습해 보면 그리 어렵지 않습니다. 실제 어려운 것은 argmax 함수가 있다는 것을 아는 것이죠.

 


< 같이 보기>

 

  • 프로그래밍 변수 variable, 상수 constant, 계수 coefficient 알아보기
 

프로그래밍 변수 variable, 상수 constant, 계수 coefficient 알아보기

파이썬 프로그램을 하다보면 변수, 상수, 계수라는 용어가 나온다. 그 부분을 정리하고 이해하고 넘어가고자 합니다. 변수는 무엇을 말하는지, 상수는 뭔지, 게다가 계수는 무엇인지... 알아보겠

twdatastory.tistory.com

 

  • 파이썬 Streamlit 의 cheat sheet - Display Data, Connect to data sources
 

파이썬 Streamlit 의 cheat sheet - Display Data, Connect to data sources

파이썬 Streamlit 을 위한 cheat sheet가 있다. 항목별로 만들어져 있다. 항목은 "Display text, Display data, Display media, Columns, ..."등이 있다. cheat sheet 내용을 여기에 옮겨 보았다. 전체 문법을 확인해 볼 수

twdatastory.tistory.com

 

  • 쉬운 코드 파이썬을 만든 사람 귀도 반 로섬 - 파이썬개발자, 파이썬프로그래밍 원칙
 

쉬운 코드 파이썬을 만든 사람 귀도 반 로섬 - 파이썬개발자, 파이썬프로그래밍 원칙

어는 크리스마스 날, 연구실의 문이 닫혀있었다. 프로그래머인 그는 갈 곳이 없다. 하지만 그동안 버켓리스트에 꼭꼭 챙겨두고 있던 내용이 떠 올랐다. 그는 집으로 갔다. 따뜻한 방에 컴퓨터를

twdatastory.tistory.com

 

  • 데이터 분석 중심 피처 엔지니어링(Feature engineering) - 반복적인 데이터 분석의 중심
 

데이터 분석 중심 피처 엔지니어링(Feature engineering) - 반복적인 데이터 분석의 중심

탐색적 데이터분석 작업의 한 단계로 피처 엔지니어링이 있다. 피처 엔지니어링이 데이터 분석 과정에서 어떤 역할을 하고 왜 중요한지를 살펴 보고자 한다. 1. 피처 엔지니어링(Feature engineering)

twdatastory.tistory.com

 

반응형