CHAPTER 1 벡터, 행렬, 배열

Zoey·2021년 5월 22일
0
post-thumbnail

1.0 소개

NumPy는 머신러닝 stack의 기초로, 머신러닝에 자주 사용되는 벡터와 행렬, 텐서 같은 데이터 구조에서 효율적인 연산을 제공한다.

1.1 벡터 만들기

import numpy as np

vector_row = np.array([1, 2, 3])
# 행이 하나인 벡터 만들기

vector_column = np.array([[1], [2], [3]])
# 열이 하나인 벡터 만들기

참고) 넘파이 배열은 ndarray 클래스의 객체이다.

print(type(vector_row))
# <class 'numpy.ndarray'>

asarray 함수를 사용해 배열을 만들 수도 있다.
단 입력이 넘파이 배열일 때는 새로운 배열을 생성하지 않는다.

new_row = np.asarray([1, 2, 3])

new_row = np.asarray(vector_row)
# asarray는 새로운 배열을 만들지 않음
new_row is vector_row
# True

array 함수는 배열이 입력되면 새로운 배열을 만든다.
입력 배열을 복사할지를 선택하는 copy 매개의 default 값이 True이기 때문에, 배열이 입력되면 복사본을 만드는 것이다.

new_row = np.array(vector_row)
new_row is vector_row
# False

asarray 함수도 array 함수를 사용하지만 copy 매개변수를 False로 지정하기 때문에 새로운 배열을 만들지 않는다.
배열을 복사하려면 의도가 명확하게 배열 객체의 copy method를 사용하는 것이 좋다.

new_row = vector_row.copy()
new_row is vector_row
# False

1.2 행렬 만들기

NumPy로 2차원 배열 만들기

import numpy as np

matrix = np.array([[1,2], [1,2], [1,2]])
# an array of 3 rows and 2 columns

그러나 행렬 데이터 구조는 권장하지 않는다.
첫째, 배열이 넘파이 표준 데이터 구조여서.
둘째, 대부분 넘파이 함수는 행렬이 아닌 배열 객체를 반환하므로.

참고) empty 함수는 초기값 대신 크기만 지정해 임의의 값이 채워진 배열을 만든다.

empty_matrix = np.empty((3,2))
zero_matrix = np.zeros((3,2))
# array([[0., 0.], [0., 0.], [0., 0.]])
# zeros는 0으로 채운 배열을 만듦

one_matrix = np.ones((3,2))
# array([1., 1.], [1., 1.], [1., 1.]])
# ones는 1로 채운 배열을 만듦

특정 값으로 채운 배열을 만드려면 full 함수를 사용하면 된다.
첫번째 파라미터는 배열 크기, 두번째는 채울 값을 전달한다.

seven_matrix = np.zeros((3,2) + 7
# array([[7,7], [7,7], [7,7]])
# 영행렬(zero matrix)을 만든 후 7을 더하기

seven_matrix = np.full(3, 2), 7)
# array([[7,7], [7,7], [7,7]])
# full 함수를 사용하면 한번에 가능

1.3 희소 행렬 만들기

희소 행렬 만들기

import numpy as np
from scipy import sparse

matrix = np.array([[0,0], [0,1], [3,0]])
matrix_sparse = sparse.csr_matrix(matrix)
# CSR 행렬 만들기

머신러닝에서 대용량 데이터를 다루는 경우는 흔하다. 이런 데이터의 원소는 대부분 0이다.
희소 행렬은 0이 아닌 원소만 저장한다. 다른 모든 원소는 0이라 가정하므로 계산 비용이 크게 절감된다.

0개의 댓글