본문 바로가기
Python/NumPy

넘파이 함수를 이용한 배열(array)의 생성 - NumPy(3)

by 콩돌 2019. 1. 16.
반응형

참고 자료

https://docs.scipy.org/doc/numpy/user/basics.creation.html



파이썬 버전 3.7 기준

NumPy 버전 1.15 기준


본 포스팅에서 다루는 범위는 다음과 같다.

array, zeros, ones, arange, linspace, indices와 같은 배열 생성.



배열(array)의 생성


NumPy 배열을 작성하는 방법으로는 크게 5가지가 있다.
  ① 파이썬 자료형 구조(예: 시퀀스형 자료형)를 NumPy 배열로 변환
  ② NumPy의 배열 생성 객체 (함수)를 이용한 배열 생성 (zeros, ones, arange 등.)
  ③ 디스크와 같은 저장매체에 저장되어있는 파일을 기반한 배열 생성
  ④ string과 버퍼 사용을 활용하여 직접 bytes를 조작하는 방식으로 배열 생성
  ⑤ 다양한 라이브러리 함수를 사용한 배열 생성 


본 포스팅에서는 ①, ②을 다룬다.


파이썬 내장 객체로부터의 배열 생성


  ○ 일반적으로 파이썬에서 배열과 유사한 구조(시퀀스형 자료형)로 정리된 수치 데이터는 NumPy 배열로 치환이 가능하다.

    ▷ NumPy에 내장된 array() 함수를 사용하면 쉽게 치환이 가능하다.

    ▷ 리스트(list)나 튜플(tuple)이 대표적으로 변경하기 쉬운 자료형이다.

  ○ 이외에 자료형에 대해서는 파이썬 인터프리터 상에서 array()함수를 직접 활용하여 테스트 해보는 것이 가능하다.


사용 예)

# NumPy import

In[2]: import numpy as np


# List

In[3]: x = np.array([1,2,3])

In[4]: x

Out[4]: array([1, 2, 3])


# Tuple

In[5]: x = np.array((1,2,3))

In[6]: x

Out[6]: array([1, 2, 3])


# Complex

In[7]: x = np.array([1,2,3+3j])

In[8]: x

Out[8]: array([ 1.+0.j,  2.+0.j,  3.+3.j])


# 2-dimensional

In[9]: x = np.array([[1,2,3],[4,5,6],[7,8,9]])

In[10]: x

Out[10]: 

array([[1, 2, 3],

       [4, 5, 6],

       [7, 8, 9]])



NumPy 자체 함수를 통한 배열 생성


zeros(shape, dtype=float, order='C'), ones(dimensions, dtype=float, order='C')

  ○ zeros() 함수는 0으로 채워진 배열을 반환하며, 요소별 설명은 다음과 같다.

    ▷ shape: 배열(행렬)의 크기를 입력받는다.

    ▷ dtype: 자료형을 입력 받으며, 기본 자료형은 float64이다.

      - float, int 형태로 입력하면 각 자료형의 기본값이 들어간다.

      - 특정 자료형(예: 'float64', 'int32' 등)을 명확히 입력하고자 할때에는 문자열 형태로 입력해야한다.

    ▷ order: 메모리 저장방식을 입력하는 항목이며, 'C'와 'F'가 입력가능하다.

      - 'C': C언어 타입으로 저장한다. 기본값이다.

      - 'F': Fortran언어 타입으로 저장한다.

  ○ ones() 함수는 1으로 채워진 배열을 반환하며, 이외의 사항은 zeros()함수와 동일하다.


사용 예)

# zeros()

In[12]: x = np.zeros((3,2))

In[13]: x

Out[13]: 

array([[ 0.,  0.],

       [ 0.,  0.],

       [ 0.,  0.]])


# ones()

In[14]: x = np.ones((3,2))

In[15]: x

Out[15]: 

array([[ 1.,  1.],

       [ 1.,  1.],

       [ 1.,  1.]])


arange([start,] end[, step,] dtype=None)

  ○ arange() 함수는 파이썬 내장 자료형 중 range() 자료형과 유사하다.

  ○ 각 입력 요소 별 설명은 다음과 같다.

    ▷ start: 배열의 시작점이며, 생략가능하다.

    ▷ end: 생성된 배열의 끝점이며, 반드시 입력해야한다.

    ▷ step: 배열이 증가하는 크기이며, 생략가능하다.

    ▷ dtype: 파일의 자료형을 입력받는다.

      - float, int 형태로 입력하면 각 자료형의 기본값이 들어간다.

      - 특정 자료형(예: 'float64', 'int32' 등)을 명확히 입력하고자 할때에는 문자열 형태로 입력해야한다.

    ▷ 정리하면, start에서 시작하여 end까지 step의 크기로 증가시킨 요소들로 배열을 생성한다.


  ○ 하나의 숫자만 입력될 경우(start, step이 생략될 경우) 0부터 end-1까지 1씩 증가한 배열을 반환한다.

  ○ End의 숫자는 출력하지 않으므로 사용에 주의를 요한다.


사용 예)

In[18]: np.arange(4)

Out[18]: array([0, 1, 2, 3])

In[19]: np.arange(1,6)

Out[19]: array([1, 2, 3, 4, 5])

In[20]: np.arange(2,5,0.5)

Out[20]: array([ 2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

In[21]: np.arange(3, dtype='float64')

Out[21]: array([ 0.,  1.,  2.])


linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  ○ matlab에서 제공하는 linspace 기능과 거의 유사하다.

  ○ 각 입력 요소 별 설명은 다음과 같다.

    ▷ start: 배열의 시작지점이다.
    ▷ stop: 생성된 배열의 끝점이다.
    ▷ num: start부터 stop까지의 배열 수를 의미하며 정수를 입력 받는다. 기본값은 50이다.
    ▷ endpoint: 끝점을 배열에 포함하는지 여부를 나타내며, 논리값을 입력받는다. 기본값은 True(참)이므로 끝점을 배열에 포함시킨다.
    ▷ restep: step의 크기를 반환하는지 여부를 나타내며, 논리값을 입력받는다. 기본값은 False(거짓)이므로 반환하지 않는다.
    ▷ dtype: 파일의 자료형을 입력받는다.(arnage에서의 dtype과 동일하다.)

사용 예)
In[29]: np.linspace(0, 5, 6, retstep=True)
Out[29]: (array([ 0.,  1.,  2.,  3.,  4.,  5.]), 1.0)
In[30]: np.linspace(6, 10, 10, endpoint=False)
Out[30]: array([ 6. ,  6.4,  6.8,  7.2,  7.6,  8. ,  8.4,  8.8,  9.2,  9.6])

indices(dimesions, dtype=<class 'int'>)

  ○ Indices() 함수는 배열의 인덱스 세트를 반환한다.

    ▷ 각 차원에서 0부터 시작하여 1씩 증가시킨 배열 세트를 반환한다.

    ▷ 2차원 행렬를 예를 들어보면, 행에서 1씩 증가시킨 배열 하나와, 열에서 1씩 증가시킨 배열하나로 출력한다. 


사용 예)

In[34]: np.indices((3,3))

Out[34]: 

array([[[0, 0, 0],

        [1, 1, 1],

        [2, 2, 2]],

       [[0, 1, 2],

        [0, 1, 2],

        [0, 1, 2]]])


In[35]: np.indices((2,4))

Out[35]: 

array([[[0, 0, 0, 0],

        [1, 1, 1, 1]],

       [[0, 1, 2, 3],

        [0, 1, 2, 3]]])



이외에도 zeros_like, ones_like, empty, empty_like, numpy.random.rand, numpy.random.randn와 같은 자체 생성 함수가 있으며, 함수로부터 생성하는 fromfunction과 파일로부터 불러오는 fromfile도 있다.

반응형

댓글