파이썬 넘파이 np.arange 함수 사용법
for 문 순회 상황 등에서 range 함수처럼 특정 수열을 만들려고 할 때, np.arange 함수를 많이 사용하게 됩니다.
np.arange 함수의 사용 방법은 사실 range 함수의 사용 방법과 동일합니다.
np.arange(시작점(생략 시 0), 끝점(미포함), step size(생략 시 1)) 인자를 넣어주면 됩니다.
한번 간단히 예제를 살펴보도록 하겠습니다.
import numpy as np
np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(1, 15, 2)
# array([ 1, 3, 5, 7, 9, 11, 13])
np.arange(9, -2, -1.5)
# array([ 9. , 7.5, 6. , 4.5, 3. , 1.5, 0. , -1.5])
실행 결과의 수열이 numpy array 형태의 자료형에 들어가 있는 것이 특징입니다.
np.arange 함수에서는 dtype 지정이 가능한 부분이 있지만, 자동으로 데이터 자료형을 정수 / 실수형에서 골라주기에 잘 사용하지 않아 따로 다루지는 않겠습니다. np.arange 메소드에서 지원하는 내용은 이 것이 거의 끝이긴 합니다.
np.arange vs range
파이썬에서 기본으로 제공하는 메소드인 range와 차이점은 그럼 무엇일까요?
첫째로, range 함수에는 정수 단위만 지원하나, np.arange는 실수 단위도 표현 가능하다는 점입니다.
np.arange(1, 5, 0.5) # 가능
range(1, 5, 0.5) # TypeError 발생
두번째로, range 메소드는 range iterator 자료형을 반환하고, np.arange 메소드는 numpy array 자료형을 반환합니다. 따라서, np.arange 메소드 결과는 넘파이에서 수행하는 연산 연계가 가능합니다.
np.arange(1, 5) * 2 # 가능(numpy array 연산)
range(1, 5) * 2 # TypeError 발생
마지막으로, np.arange 메소드와 range 메소드의 수행시간 차이를 살펴보도록 하겠습니다. for 문 등에서 순회하고 싶은 수열이 정수로 구성되어 있다면, range 메소드로 순회하는 것이 수행시간에 있어 조금 더 유리하다는 점을 살필 수 있습니다.
import numpy as np
import time
# range 순회 예시
start = time.time()
for x in range(10 ** 5): x * 2
print(time.time() - start) # 0.014
# np.arange 순회 예시
start = time.time()
for x in np.arange(10 ** 5): x * 2
print(time.time() - start) # 0.043
# np.arange numpy array 연산
start = time.time()
np.arange(10 ** 5) * 2
print(time.time() - start) # 0.001
np.arange가 range보다 입출력에서 3배 정도 더 많은 시간이 소요되었습니다. 다만, array에서 직접 연산하는 경우는 np.arange를 이용하는 것이 압도적으로 유리하겠지요?
이상으로 np.arange의 기능과 range 함수와의 차이점에 대해서 살펴보았습니다. 감사합니다.
'Python > Numpy' 카테고리의 다른 글
[Numpy] 배열 쌓기 : np.hstack, np.vstack, np.concatenate 차이 비교 (0) | 2021.12.12 |
---|---|
[Numpy] np.where 사용법 : 조건 만족하는 위치 인덱스 찾기 (0) | 2021.12.02 |
[Numpy] 파이썬 넘파이 np.linspace 함수(구간 내에 숫자 채우기) (0) | 2021.11.30 |