Python/Numpy

[Numpy] np.arange 사용법, range 함수와 차이

jimmy_AI 2021. 12. 2. 13:56
반응형

파이썬 넘파이 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 함수와의 차이점에 대해서 살펴보았습니다. 감사합니다.