Python/Numpy

[Numpy] 파이썬 리스트(배열)에서 0이 아닌 값 위치/개수 찾기 : np.nonzero

jimmy_AI 2022. 10. 10. 12:57
반응형

Python numpy nonzero

파이썬의 리스트 혹은 배열에서 0이 아닌 원소들의 인덱스 번호나

개수를 찾을 수 있는 방법을 nonzero 함수의 사용법을 기준으로 다루어 보겠습니다.

 

 

1차원 리스트/배열의 경우

먼저, 1차원 리스트 혹은 배열 a에 대해서는 np.nonzero(a) 형태로 함수를 써주시면

0이 아닌 원소들의 위치들을 모아서 반환해줍니다.

개수는 해당 위치 배열의 길이를 통하여 바로 구할 수 있습니다.

import numpy as np

a = [0, 0, 1, 0, 0, 2, 0, 1]

# 0이 아닌 인덱스 위치
np.nonzero(a) # (array([2, 5, 7]),)

# 0이 아닌 원소의 개수
len(np.nonzero(a)[0]) # 3

 

반응형

 

2차원 이상 배열의 경우

2차원 이상의 다차원 array에 대해서도 같은 식으로 nonzero 함수를 적용할 수 있습니다.

다만, 0이 아닌 인덱스 위치를 (axis = 0 기준, axis = 1 기준, ...) 형태로 모아서 반환합니다.

 

0이 아닌 원소 개수를 축 별로 구하고 싶다면 != 0 적용 후 sum 함수를 적용하시면 됩니다.

b = np.array([[0, 0, 0],
              [1, 1, 1],
              [1, 0, 0]])

# 0이 아닌 인덱스 위치(전체)
np.nonzero(b) # (array([1, 1, 1, 2]), array([0, 1, 2, 0]))

# 0이 아닌 원소의 개수(전체)
len(np.nonzero(b)[0]) # 4

# 0이 아닌 원소의 개수(가로 방향 기준)
np.array(b != 0).sum(axis = 1) # array([0, 3, 1])

# 0이 아닌 원소의 개수(세로 방향 기준)
np.array(b != 0).sum(axis = 0) # array([2, 1, 1])