[Python.NumPy] arange/zeros/empty 함수의 차이 - Creation Function I

2020. 12. 4. 05:00Python과 머신러닝/NumPy 데이터 분석

0. 요약

  • Creation Function이란 배열 생성을 쉽게 도와주는 함수들을 의미한다.
  • 대표적으로 arange/zeros/empty 함수가 있는데, 각각이 어떻게 동작하는지 코드를 통해 알아보자.
In [1]:import numpy as np

In [2]:np.arange(0, 5, 0.5) # 0이상 5미만까지 0.5씩 증가하는 값의 array를 만들어라
Out[2]:array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

In [3]:np.arange(30) # 0이상 30미만까지 1씩 증가하는 값의 array를 만들어라
Out[3]:array([ 0, 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])

In [4]:np.arange(30).reshape(5,6) #array를 np matrix로 변형하여 사용할 수 있다. 
Out[4]:array([[ 0, 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]])

In [5]:np.zeros(shape=(10,),   # (10,) tuple 형태로 크기 지정
                dtype=np.int8) # 0으로 만들어줌
Out[5]:array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)

In [6]:np.empty(shape=(10,),   # (10,) tuple 형태로 크기 전달 
                dtype=np.int8) # dtype 지정
Out[6]:array([ 32, -44, -103, -36, -97, 1, 0, 0, 0, 0], dtype=int8)

 

1. Creation Function이란?

  • 생성 함수 : 말 그대로 무언가를 만드는 함수들을 통칭하는 용어이다.
  • NumPy는 array를 쉽게 만들기 위한 함수들을 제공하고 있다.
  • 오늘 배워볼 함수들은 arange, zeros, empty이다.

 

2. arange 함수

In [1]:import numpy as np

In [2]:np.arange(0, 5, 0.5) # 0이상 5미만까지 0.5씩 증가하는 값의 array를 만들어라
Out[2]:array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

In [3]:np.arange(30) # 0이상 30미만까지 1씩 증가하는 값의 array를 만들어라
Out[3]:array([ 0, 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])

In [4]:np.arange(30).reshape(5,6) #array를 np matrix로 변형하여 사용할 수 있다. 
Out[4]:array([[ 0, 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]])
  • arange는 3개의 Parameter를 입력받는다 : Start, End, Interval.
  • Start 이상, End 미만의 값을 Interval 간격으로 생성하여 하나의 배열에 담아주는 함수이다. 
  • Parameter를 2개만 전달할 경우 Start와 End로 인식하여 동작한다 (Interval의 Default 값은 1이다).
  • Parameter를 1개만 전달할 경우 End로 인식하여 동작한다 (Start의 Default 값은 0이다).
  • 이렇게 arange를 통해 만들어진 배열을 .reshape 함수를 통해서 원하는 형태로 변형하여 사용할 수도 있다.

 

 

3. zeros 함수

In [5]:np.zeros(shape=(10,),   # (10,) tuple 형태로 크기 지정
                dtype=np.int8) # 0으로 만들어줌
Out[5]:array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int8)
  • zeros 함수는 shape와 dtype을 전달받아서 동작하는 함수이다.
  • shape를 통해서 크기를 지정해주고, dtype으로 data type을 지정해준다.
  • 그러면 shape와 dtype에 해당하는 0으로 채워진 배열을 반환해주는 함수이다.

 

4. empty 함수

In [6]:np.empty(shape=(10,),   # (10,) tuple 형태로 크기 전달 
                dtype=np.int8) # dtype 지정
Out[6]:array([ 32, -44, -103, -36, -97, 1, 0, 0, 0, 0], dtype=int8)
  • zeros 함수와 동일한 parameter를 입력받는 함수이다.
  • 많이들 zeros와 헷갈리는 함수인데, zeros와 empty의 차이는 초기화 여부이다.
  • zeros는 메모리를 할당받아 0으로 초기화한 뒤에 반환하지만,
    empty는 메모리 할당만 받고 초기화 없이 반환한다.
  • 그렇기 때문에 empty 함수를 실행할 때마다 값이 다른 것을 확인할 수 있다. 
  • 이는 해당 메모리 영역에 어떤 데이터가 남아있었던지 상관없이 그대로 영역의 주소만 알려줄 뿐, 초기화는 사용자에게 맡기기 때문이다.
  • empty의 장점은 초기화를 생략하기 때문에 성능이 조금 더 개선된다는 점인데, 실무에서는 거의 사용되는 적이 없다

 

5. 마무리

  • arange 함수 : start/end/interval을 입력받아서 배열을 만들어준다.
  • arange 함수 뒤에 .reshape을 사용해서 크기를 조절하여 사용하는 경우가 많다.
  • zeros 함수 : shape과 dtype을 입력받아 0으로 초기화된 배열을 만들어준다.
  • empty 함수 : shape과 dtype을 입력 받아 초기화되지 않은 배열을 만들어준다.
반응형