딥러닝과 컴퓨티비전을 공부하는 요즘 numpy와 vector 연산이 얼마나 중요하고 편리한지 깨닫는 중이다.
numpy의 특정 값을 조건에 따라 변환시키는 방법에 대해 정리하려고 한다.
예시를 들어, numpy array에서 0보다 작은 수는 0으로 변환하고, 나머지는 그대로 두는 여러 방법을 이야기해보려 한다.
1. List Comprehension
* 예시
* 사용한 코드
import numpy as np
import time
a = np.arange(-100, 100)
b = [0 if i < 0 else i for i in a]
* 특징
- 원래의 배열은 그대로 있다. 따라서 list comprehension 값을 사용하려면 다른 변수에 할당시켜줘야 한다.
- for loop을 쓰기 때문에 배열의 크기가 커지면 성능이 안좋아진다.
- 효율적인 방법이 아니다.
2. Indexing
* 예시
* 사용한 코드
import numpy as np
a = np.arange(-100, 100)
a[a<0] = 0
* 특징
- 원래의 배열 a가 직접 변경된다
- 효율적인 편이다, 벡터연산인 듯 하다
3. np.where()
* 예시
* 사용한 코드
import numpy as np
a = np.arange(-100, 100)
b = np.where(a < 0, 0, a)
* 특징
- np.where(조건, True일때 값, False일때 값)
- 벡터 연산이므로 for loop을 돌지 않아 속다가 매우 빠르다
- 원래의 배열 a는 변경되지 않는다.
4. np.clip()
* 예시
* 사용한 코드
import numpy as np
a = np.arange(-100, 100)
b = np.clip(a, 0, 100)
* 특징
- np.clip(배열, 최소값 기준, 최대값 기준)
- 최소값과 최대값 조건으로 값을 기준으로 해서, 이 기준을 벗어나는 값에 대해서는 일괄적으로 최대값, 최소값으로 채워준다.
- 원래의 배열 a는 그대로 있다.
- 최소값 기준만 적용해서 간단하게 0보다 작은 수는 모두 0으로 바꾸는 것은 a.clip(0)으로 사용하면 된다.
a = np.arange(-5, 5)
a.clip(0)
결과
array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4])
출처: https://rfriend.tistory.com/426
'Programming Language > numpy' 카테고리의 다른 글
numpy random(난수) sampling - np.random.choice (0) | 2020.01.02 |
---|---|
numpy 최소, 최대 조건 색인값: np.argmin(), np.argmax(), np.where() (0) | 2019.12.27 |
numpy.maximum (0) | 2019.12.26 |