Np argmax 2개 - Np argmax 2gae

>>> x = np.array([[4,2,3], [1,0,3]]) >>> index_array = np.argmax(x, axis=-1) >>> # Same as np.amax(x, axis=-1, keepdims=True) >>> np.take_along_axis(x, np.expand_dims(index_array, axis=-1), axis=-1) array([[4], [3]]) >>> # Same as np.amax(x, axis=-1) >>> np.take_along_axis(x, np.expand_dims(index_array, axis=-1), axis=-1).squeeze(axis=-1) array([4, 3])

반응형

np.any(조건) - 배열의 데이터 중 조건과 맞는 데이터가 있으면 True 전혀 없으면 False

 

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) np.any(arr > 5) True np.any(arr < 0) False

np.all(조건) - 배열의 모든 데이터가 조건과 맞으면 True 하나라도 다르면 False

np.all(arr > 5) False np.all(arr < 10) True

배열의 같은 위치에 있는 요소간의 비교

배열의 shape이 같아야 함

비교연산자 ==, <, > 로 배열 요소 비교

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr2 = np.array([[1, 2, 3], [1, 5, 7], [6, 8, 9]]) arr1 == arr2 array([[ True, True, True], [False, True, False], [False, True, True]]) arr1 > arr2 array([[False, False, False], [ True, False, False], [ True, False, False]])

np.any(조건)을 쓰지 않고 배열의 함수로 any()를 쓰게 되면

배열의 데이터 중 True나 0이 아닌 숫자가 있으면 True, 하나라도 없으면 False 반환

(arr1 > arr2).any() True

np.all(조건)을 쓰지 않고 배열의 함수로 all()를 쓰게 되면

배열의 모든 데이터가 0이 아닌 숫자 이거나 True일 때 True를 반환. 하나라도 0 이나 False이면 False 반환

(arr1 > arr2).all() False

shape이 다른 배열끼리 비교하면 value error 발생

arr1 = np.array([1, 2, 3, 4, 5, 6]) arr2 = np.array([[1, 2, 3], [1, 5, 7]]) arr1 > arr2 ValueError: operands could not be broadcast together with shapes (6,) (2,3)

 

np.where()

np.where(조건, True 일 때 출력값, False 일 때 출력값)

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) np.where(arr > 4, arr, 0) array([[0, 0, 0], [0, 5, 6], [7, 8, 9]])

요소가 4보다 크면 arr(그대로). 4보다 작으면 0으로 변환하여 반환

np.where(arr > 4, 0, arr+1) array([[2, 3, 4], [5, 0, 0], [0, 0, 0]])

요소가 4보다 크면 0으로 4보다 작으면 원래 요소에 +1 하여 반환

 

np.where(조건) 조건만 쓰면 조건에 맞는 데이터의 인덱스를 반환

np.where(arr > 4) (array([1, 1, 2, 2, 2], dtype=int64), array([1, 2, 0, 1, 2], dtype=int64))

반환되는 튜플에서 첫번째 요소인 [1, 1, 2, 2, 2]는 행

반환되는 튜플에서 두번째 요소인 [1, 2, 0, 1, 2]는 열

즉 (1,1), (1,2), (2,0), (2,1), (2,2) 인덱스의 요소가 4보다 큰 데이터임을 나타냄

np.all(arr > 5) False np.all(arr < 10) True 0

1차원 배열에서는 2번째, 3번째, 4번째 값이 조건에 만족하는 데이터의 인덱스임

 

np.isnan(arr) - 배열의 데이터 중 NaN 값인 요소는 True 아니면 False로 변환

NaN은 Not a Number를 의미

np.all(arr > 5) False np.all(arr < 10) True 1

np.isfinite(arr) - 배열의 데이터 중 셀수 있는 데이터를 True 아니면 False로 변환

np.all(arr > 5) False np.all(arr < 10) True 2

np.inf, np.NaN, np.NINF 등을 False로 변환한다.

 

np.argmax(arr) - 배열의 데이터 중 최대값의 인덱스를 반환

np.argmin(arr) - 배열의 데이터 중 최소값의 인덱스를 반환

np.all(arr > 5) False np.all(arr < 10) True 3

1차원 배열로 생각한 인덱스를 반환

np.all(arr > 5) False np.all(arr < 10) True 4

axis=1 일 때 행마다 최대값인 인덱스를 반환

10, 2, 3 중 최대값은 10이기 때문에 10의 인덱스 0 반환

4, 50, 6 중 최대값은 50이기 때문에 50의 인덱스 1 반환

np.all(arr > 5) False np.all(arr < 10) True 5

axis=0 일 때 열마다 최대값인 인덱스를 반환

10, 4 중 최대값은 10이기 때문에 10의 인덱스 0 반환

2, 50 중 최대값은 50이기 때문에 50의 인덱스 1 반환

3, 6 중 최대값은 6이기 때문에 50의 인덱스 1 반환

 

argmin()은 최소값을 구하는 함수로 argmax()와 동일한 방법으로 사용됨

반응형

공유하기

게시글 관리

구독하기개발개발

저작자표시 비영리 변경금지

'파이썬 > Numpy' 카테고리의 다른 글

Numpy 사칙연산, Transform, 브로드캐스팅  (0)2019.08.08Numpy 연산(sum, mean, std, exp, vstack, hstack)과 axis의 의미  (0)2019.08.07Numpy 배열 생성 방법(arange, zeros, ones, random)  (0)2019.08.07Numpy 요소선택 인덱싱, 슬라이싱 (indexing, slicing)  (0)2019.08.07Numpy shape 변환 (reshape, flatten)  (1)2019.08.07

이번 포스팅에서는 Python numpy 의 메소드, 함수 중에서 


- 최소값, 최대값, 혹은 조건에 해당하는 색인(index) 값을 찾기 

   : np.argmin(), np.argmax(), np.where()


- 최소값, 최대값, 혹은 조건에 맞는 값 찾기 

   : np.min(), np.max(), x[np.where()]


에 대해서 소개하겠습니다. 


분석할 때 꽤 많이 사용되므로 기억해두시면 좋겠습니다. 





  (1) 최소값(min), 최대값(max): np.min(), np.max()


x.min(), np.min(x), min(x) 모두 동일한 결과를 반환합니다. 



In [1]: import numpy as np


In [2]: x = np.array([5, 4, 3, 2, 1, 0])


In [3]: x.min()

Out[3]: 0


In [4]: np.min(x)

Out[4]: 0


In [5]: x.max()

Out[5]: 5


In [6]: np.max(x)

Out[6]: 5

 




  (2) 최소값, 최대값의 색인 위치: np.argmin(), np.argmax()



In [7]: x.argmin()

Out[7]: 5


In [8]: np.argmin(x)

Out[8]: 5


In [9]: x.argmax()

Out[9]: 0


In [10]: np.argmax(x)

Out[10]: 0

 




  (3) 조건에 맞는 값의 색인 위치: np.where()


배열에서 3과 같거나 큰 값을 가지는 색인의 위치를 알고 싶을 때, 


 

In [11]: np.where(x >= 3)

Out[11]: (array([0, 1, 2], dtype=int64),)




(4) 조건에 맞는 값을 indexing 하기: x[np.where()] 


배열에서 3과 같거나 큰 값을 indexing 하고 싶을 때, 



In [12]: x[np.where(x >= 3)]

Out[12]: array([5, 4, 3])

 




  (5) 조건에 맞는 값을 특정 다른 값으로 변환하기

     : np.where(조건, 조건에 맞을 때 값, 조건과 다를 때 값)


배열의 값이 3과 같거나 크면 3으로 변환하고, 3보다 작으면 그대로 값을 유지하고 싶을 때, 

(for loop & if else 조건문을 사용하는 것보다 수십배 빠르므로 매우 유용함)



In [13]: np.where(x >= 3, 3, x)

Out[13]: array([3, 3, 3, 2, 1, 0])

 


 

참고로, 위의 np.where를 사용한 배열 값 변환을 for loop & if else 조건문을 사용해서 써보면 아래와 같습니다. for loop은 데이터 사이즈가 커질 경우 속도가 매우 느려지므로, 위의 대용량 데이터는 벡터화된 연산을 하는 np.where() 함수 사용을 권합니다. .

 

 

In [14]: x_2 = []

    ...: for i in list(x):

    ...: if i >= 3:

    ...: x_2.append(3)

    ...: else:

    ...: x_2.append(i)

    ...:

    ...:


In [15]: x_2 = np.asarray(x_2)


In [16]: type(x_2)

Out[16]: numpy.ndarray


In [17]: x_2

Out[17]: array([3, 3, 3, 2, 1, 0])

 

 

많은 도움이 되었기를 바랍니다. 

 

반응형

공유하기

게시글 관리

구독하기R, Python 분석과 프로그래밍의 친구 (by R Friend)

저작자표시 비영리 변경금지

  • 카카오스토리
  • 트위터
  • 페이스북

'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글

[Python] numpy 배열 외부 파일로 저장하기(save), 외부 파일을 배열로 불러오기(load)  (2)2018.05.21[Python] numpy array 정렬, 거꾸로 정렬, 다차원 배열 정렬  (2)2018.05.18[Python] numpy 집합함수 (set functions)  (0)2018.05.17[Python NumPy] 배열을 옆으로, 위 아래로 붙이기 : np.r_, np.c_, np.hstack(), np.vstack(), np.column_stack(), np.concatenate(axis=0), np.concatenate(axis=1)  (6)2018.04.14[Python NumPy] 다차원 배열을 1차원 배열로 평평하게 펴주는 ravel(), flatten() 함수  (0)2018.02.18

Toplist

최신 우편물

태그