'다차원'에 해당되는 글 1건

  1. 2015.07.10 넘파이(numpy)에서 다차원 배열을 입력하는 방법

 넘파이(numpy)를 사용하기 위해서는 다음과 같이 import 해야 한다. winpython, python(x,y)에는 기본적으로 포함되어 있으므로 바로 사용할 수 있다. import 명령을 이용하면 되는데 다음과 같이 몇 가지 방법이 있다.


>>> import numpy # 넘파이의 모든 객체를 numpy.obj 형식으로 불러 사용할 수 있다.
>>> import numpy as np  # 넘파이의 모든 객체를 np.obj 형식으로 불러 사용할 수 있다.
>>> from numpy import * # 넘파이의 모든 객체를 내장 함수 (객체) 처럼 사용 가능.

 

넘파이는 ndarray (n-dimensional array 의 약어, 이후 배열) 라는 객체를 사용하는데 이는 리스트와 유사하지만 다차원 데이터의 연산에 좀 더 효율적이라고 한다. 리스트는 모든 형식의 객체를 저장할 수 있지만 배열은 한 행의 요소는 모두 같은 자료형어야 한다.

배열 생성

 배열을 입력하는 가장 기본적인 함수는 array() 이다. 첫 번째 인자로 리스트를 받는데 이것으로 array객체를 생성한다.

>>> np.array( [1, 2, 3] ) #1차 배열 (벡터) 생성
>>> np.array( [ [1, 2, 3], [4, 5, 6] ) # 2x3 크기의 2차원 배열 (행렬) 생성

일반적으로 3차원, 4차원, ... , n차원 배열도 중첩리스트를 이용하여 유사하게 생성할 수 잇다.

 파이썬의 내장 함수인 range()와 유사하게 배열 객체를 반환해주는 arange() 함수가 있다.

>>> np.arange(10) # 1차원 배얼 [0,1,2, ... ,9] 생성


그리고 시작점과 끝점을 균일 간격으로 나눈 점들을 생성해주는 linspace()함수도 있다.


>>> c = np.linspace(0, 1, 6)   # start, end, num-points
>>> c
    array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])

>>> d = np.linspace(0, 1, 5, endpoint=False)
>>> d
    array([ 0. , 0.2, 0.4, 0.6, 0.8])

생성된 배열은 reshape() 함수를 이용하여 행수와 열수를 조절할 수 있다.

>>> a = np.arange(10) # 1차원 배열 [0,1,2, ... ,9] 생성
>>> a = a.reshape(2,5) # 같은 요소를 가지고 2x5 배열로 변형


특수 행렬 생성

 넘파이에는 특수 행렬을 생성하기 위한 함수들이 있다. zeros(), ones() 라는 함수들은 각각 0과 1로 채원진 배열을 생성하는데 차수를 정수 혹은 튜플로 받는다. 예를 들어서 0으로 채워진 5x5 배열을 만들고 싶다면 다음과 같이 한다.

>>> b1 = np.ones( 10 ) # 1로 채원진 10 크기의 (1차원) 배열 생성
>>> b2 = np.zeros( (5,5) ) # 0으로 채원진 5x5 크기의 배열 생성


대각행렬을 생성하기 위한 eye() 함수와 diag() 함수도 있다. eye() 함수는 항등행렬을 생성하고 diag()는 주어진 정방행렬에서 대각요소만 뽑아내서 벡터를 만들거나 반대로 벡터요소를 대각요소로 하는 정방행렬을 만들어 준다..

  

         정의 : eye(N, M=, k=, dtype=), M은 열 수, k는 대각 위치(대각일 때가 0), dtype은 데이터형


>>> np.eye(2, dtype=int)
    array([[1, 0],
           [0, 1]])

>>> np.eye(3, k=1)
    array([[ 0.,  1.,  0.],
           [ 0.,  0.,  1.],
           [ 0.,  0.,  0.]])


         정의:  diag(v, k=0), v는 array_like, k는 대각 위치


>>> x = np.arange(9).reshape((3,3))
>>> x
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
>>> np.diag(x)
    array([0, 4, 8])
>>> np.diag(x, k=1)
    array([1, 5])
>>> np.diag(x, k=-1)
    array([3, 7])
>>> np.diag(np.diag(x))
    array([[0, 0, 0],
           [0, 4, 0],
           [0, 0, 8]])

 

이에 반해서 empty() 라는 함수는 크기만 지정해 두고 각각의 요소는 초기화 시키지 않는다. 따라서 이 함수로 생성된 배열의 요소는 가비지값이 채워져 있다.


>>> c = np.empty( (2,2) ) # 가비지 값으로 채원진 2x2 크기의 배열 생성



Posted by 살레시오
,