반응형
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])
'Python > Numpy' 카테고리의 다른 글
[Numpy] 레코드 배열 recarray 자료형 선언 및 사용 방법 (0) | 2022.12.09 |
---|---|
[Numpy] 파이썬 eigenvalue, eigenvector 구하기 : np.linalg.eig (0) | 2022.09.27 |
[Numpy] 파이썬 배열 회전 함수 : np.rot90 (0) | 2022.08.08 |