[NumPy] numpy.array()부터 numpy.random()까지

고범수·2022년 2월 22일

NumPy

목록 보기
3/5

numpy.array()

import numpy as np

arr = np.array([0, 1, 2, 3])
arr_range = np.array(range(1, 10))
arr_tuple = np.array((4, 5, 6, 7))

위치인자로 array_like 데이터를 전달하면 된다. 매개변수 object에 할당된다. array_like란, sequence 자료형 혹은 array를 return하는 __array__ 메소드를 가진 객체를 뜻한다.

2차원 ndarray(N-dimensional array)

np.array([[1, 2, 3,], [4,5,6]])

3차원 ndarray(N-dimensional array)

np.array([[[1, 2, 3,], [4,5,6]], [[7,8,9], [10, 11, 12]]])

numpy.arange()

arange()는 range()와 사용법이 비슷하다.
arange([start], stop, [step])이고 [ ]는 생략가능한 parameter를 뜻한다.

np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(5,10) # array([5, 6, 7, 8, 9])
np.arange(1,10,2) # array([1, 3, 5, 7, 9])

numpy.reshape()

ndarray의 형상을 변형한다.

np.arange(12) # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

3행 4열로 변형하려면 아래와 같다.

np.arange(12).reshape(3,4) 
# array([[ 0,  1,  2,  3],
#      [ 4,  5,  6,  7],
#      [ 8,  9, 10, 11]])

3차원도 당연히 가능하다. (2, 3, 2)의 shape으로 형상변경은 아래와 같다.

np.arange(12).reshape(2,3,2)
# array([[[ 0,  1],
#        [ 2,  3],
#        [ 4,  5]],

#       [[ 6,  7],
#        [ 8,  9],
#        [10, 11]]])

numpy.linspace()

구간을 원하는 개수만큼 등간격으로 나누어 ndarray형태로 return한다.

아래는 0부터 1까지의 구간을 5개만큼 등간격으로 나누어 ndarray를 return한다.

np.linspace(0,1,5) # array([0.  , 0.25, 0.5 , 0.75, 1.  ])

numpy.logspace()

log도 위와 비슷하다.

np.logspace(1, 5, 5) # array([1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05])

numpy.zeros()

모든 요소의 값이 0인 ndarray를 생성한다. shape을 인자로 전달하면 되며, 전달하는 형태는 int 혹은 int들의 tuple이다.
그리고 dtype 키워드 인자를 통해서 자료형을 지정해 줄 수 있다. Default는 numpy.float64이다.

np.zeros(3) # array([0., 0., 0.])
np.zeros((3, 3))
# array([[0., 0., 0.],
#       [0., 0., 0.],
#       [0., 0., 0.]])
np.zeros((2, 4, 3))
#array([[[0., 0., 0.],
#        [0., 0., 0.],
#        [0., 0., 0.],
#        [0., 0., 0.]],

#       [[0., 0., 0.],
#        [0., 0., 0.],
#        [0., 0., 0.],
#        [0., 0., 0.]]])

numpy.ones()

모든 요소의 값이 1인 ndarray를 생성한다. 나머지는 np.zeros()와 비슷하다.

np.ones((2,4,3))
# array([[[1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.]],

#       [[1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.]]])

numpy.full()

모든 요소의 값을 지정한 값으로 채운 ndarray를 생성한다.
np.full(shape, fill_value) 이며, fill_value는 scalar 혹은 array_like 데이터를 받을 수 있다.

아래는 모든 요소가 5로 채워진 3행 2열 ndarray를 생성한다.

np.full((3,2), 5)
# array([[5, 5],
#       [5, 5],
#       [5, 5]])

numpy.identity()

정방 단위 행렬을 생성한다. 정방행렬(Square matrix)는 행과 열의 크기가 같은 행렬이고, 단위행렬(Identity matrix)는 정방행렬이면서 대각의 요소만 1, 나머지는 모두 0값을 갖는 행렬이다. 행과 열이 같으므로 int값 하나만 전달하면 되겠다.

np.identity(3)
# array([[1., 0., 0.],
#       [0., 1., 0.],
#       [0., 0., 1.]])

numpy.eye()

대각의 요소만 1, 나머지는 모두 0인 2D array를 생성한다.
np.eye(N, M) 이며, N은 row의 개수, M은 column의 개수이다. 이중에서 M은 optinal parameter이다.

np.eye(3)
# array([[1., 0., 0.],
#       [0., 1., 0.],
#       [0., 0., 1.]])
np.eye(2,3)
# array([[1., 0., 0.],
#       [0., 1., 0.]])

numpy.diag()

두가지 기능을 가진다. 하나는 대각의 요소를 추출해내는 기능, 다른 하나는 대각 array를 생성하는 기능.

numpy.diag(v, k=0) 이며, v는 array_like 데이터를 받는다. k는 main diagonal을 기준으로 대각선을 선택한다.

v가 2D array이면, 그 v의 k번째 diagonal을 return한다.

v가 1D array이면, 대각의 요소가 v로 이루어진 2D array를 return한다.

아래는 대각의 요소가 [1,2,3]인 행렬을 얻고, 얻어낸 행렬을 다시 diag()함수로 대각의 요소들만 추출해내는 코드이다.

dia = np.diag([1,2,3])
# array([[1, 0, 0],
#       [0, 2, 0],
#       [0, 0, 3]])

np.diag(dia)
# array([1, 2, 3])

numpy.zeros_like()

주어진 array와 같은 shape을 가지면서 요소가 모두 0인 array를 만든다.

아래는 2행 3열 array를 만드는 코드.

arr = np.arange(6).reshape(2,3)

arr
# array([[0, 1, 2],
#       [3, 4, 5]])

아래는 위에서 만든 2행 3열 array와 같은 shape을 가지면서 요소가 모두 0인 array를 만드는 코드.

np.zeros_like(arr)
# array([[0, 0, 0],
#       [0, 0, 0]])

numpy.ones_like()

주어진 array와 같은 shape을 가지면서 요소가 모두 1인 array를 만든다.

아래는 2행 3열 array를 만드는 코드.

arr = np.arange(6).reshape(2,3)

arr
# array([[0, 1, 2],
#       [3, 4, 5]])

아래는 위에서 만든 2행 3열 array와 같은 shape을 가지면서 요소가 모두 1인 array를 만드는 코드.

np.ones_like(arr)
# array([[1, 1, 1],
#       [1, 1, 1]])

numpy.full_like()

주어진 array와 같은 shape을 가지면서 모든 요소를 지정한 값으로 채운 array를 만든다.

아래는 2행 3열 array를 만드는 코드.

arr = np.arange(6).reshape(2,3)

arr
# array([[0, 1, 2],
#       [3, 4, 5]])

아래는 위에서 만든 2행 3열 array와 같은 shape을 가지면서 요소가 모두 7인 array를 만드는 코드.

np.full_like(arr, 7)
# array([[7, 7, 7],
#       [7, 7, 7]])

numpy.random.random()

[0, 1) 구간의 random floats를 return한다. 원하는 개수를 인수로 넘겨주면 된다.

np.random.random(5) # array([0.43009645, 0.05558898, 0.33985519, 0.8738481 , 0.40706884])

numpy.random.randint()

np.random.randint(low, high=None, size=None) 이다.

high가 전달되지 않은 경우(dafault), [0, low) 구간에서 int value를 return한다.
high가 전달된 경우, [low, high) 구간에서 int value를 return한다.

size로 얻을 data의 개수를 지정할 수 있다.

아래는 [1, 100) 구간에서 5개의 int value를 얻어내는 코드.

np.random.randint(1, 100, 5) # array([55, 66,  5, 46, 56])

다음에는

NumPy array의 배열연산에 대해 알아보도록 하자.

0개의 댓글