일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- matrix-vector product
- 빅오 표기법
- python
- 재귀함수
- homogeneous linear system
- nontrivial solution
- matrix fo a linear transformation
- 빅오메가
- Big Omega
- linear dependence
- Big-O 예제
- recursive algorithms
- matrix trnasformations
- Big-Oh notation
- NumPy
- itertools
- 일차변환
- one-to-one
- Big Theta
- solutions of matrix equation
- nonhomogeneous linear system
- 배열 섞기
- 빅세타
- 알고리즘 분석의 실례
- 이진 탐색
- 코틀린 Hello World!
- 코틀린 시작하기
- trivial solution
- 랜덤 순서 배열
- Big-Oh 예제
- Today
- Total
코딩 연습
(파이썬) numpy.nonzero 본문
numpy 모듈의 nonzero 함수는 요소들 중 0이 아닌 값들의 index 들을 반환해 주는 함수이다. 다음의 예제를 보자.
>>> import numpy as np
>>> a=np.array([1, 0, 2, 3, 0])
>>> np.nonzero(a)
(array([0, 2, 3]),)
0이 아닌 값 1, 2, 3 의 index 인 0, 2, 3 을 array 형태로 리턴해 주는 것을 볼 수 있다.
그런데 a 가 2D array 가 되면 그 결과를 보기가 좀 복잡해 진다.
>>> a=np.array([[1, 0, 7], [8, 1, 0], [1, 0, 0]])
>>> a
array([[1, 0, 7],
[8, 1, 0],
[1, 0, 0]])
>>> np.nonzero(a)
(array([0, 0, 1, 1, 2]), array([0, 2, 0, 1, 0]))
a 가 행렬 $\left ( \begin{matrix} 1 & 0 & 7\\8 & 1 & 0\\1 & 0 & 0 \end{matrix} \right )$ 와 같은 2D array 가 되면 2개의 array 로 구성된 튜플이 반환되는 것을 볼 수 있다.
이 결과가 무엇을 의미하는지 처음에는 알아보기가 쉽지 않다. 간단히 설명하면 각각의 array 에 index 가 같은 것들끼리 묶으면 2D array 의 0이 아닌 값들이 위치해 있는 index 를 얻을 수 있다. 즉, a 의 요소 중 (0,0), (0, 2), (1, 0), (1, 1), (2, 0) 에 위치한 요소들이 0 이 아닌 값들을 갖고 있다는 것을 보여주는 것이다.
따라서 이 결과를 쉽게 보려면 다음과 같이 결과로 주어진 것을 transpose 시켜주면 된다.
>>> np.transpose(np.nonzero(a))
array([[0, 0],
[0, 2],
[1, 0],
[1, 1],
[2, 0]])
그러면 위와 같이 0이 아닌 요소들의 index 를 한 눈에 확인할 수 있게 된다.
마지막으로 0이 아닌 a 의 요소들의 값들을 볼 수 있는 방법도 있다.
>>> a[np.nonzero(a)]
array([1, 7, 8, 1, 1])
위와 같이 a[np.nonzero(a)] 를 해주면 1행부터 시작하여 0이 아닌 요소들의 값을 차례대로 갖는 array 가 결과로 리턴된다.
np.nonzero 가 꼭 0이 아닌 요소들의 index 만 찾아주는 것은 아니다. 다음과 같이 np.nonzero(조건) 의 형태로 조건을 주면 조건을 참으로 만드는 요소들의 index 가 리턴된다.
>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a > 3
array([[False, False, False],
[ True, True, True],
[ True, True, True]], dtype=bool)
>>> np.nonzero(a > 3)
(array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))
>>> np.transpose(np.nonzero(a > 3))
array([[1, 0],
[1, 1],
[1, 2],
[2, 0],
[2, 1],
[2, 2]])
또한 다음과 같은 형태로도 조건을 만족시키는 index 들을 얻을 수 있다.
>>> (a > 3).nonzero()
(array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))
'Python' 카테고리의 다른 글
(파이썬) numpy.amax (0) | 2017.03.25 |
---|---|
(파이썬) numpy.arange (0) | 2017.03.25 |
(파이썬) Python 내장함수 all (0) | 2017.03.24 |
(파이썬) functools 모듈의 reduce 함수 (0) | 2017.03.23 |
(파이썬) Python 내장함수 enumerate (0) | 2017.03.22 |