"""
numpy package를 사용한 벡터 연산
"""
import numpy as np
print('numpy version: ', np.__version__)
numpy version: 1.17.4
# 파이썬 list 데이터 타입의 연산
v = [1, 2] # class list
# print(type(v))
print('v = ', v)
w = [2, 3]
print('w = ', w)
print(v + w)
# print(v - w) # 오류 발생 !!
실행 결과
v = [1, 2]
w = [2, 3]
[1, 2, 2, 3]
# list는 + 연산을 사용할 수 있음
# + 연산자는 extend 함수와 비슷한 기능
# + 연산자는 v나 w를 변경하지 않고, 새로운 list를 리턴
# v.extend(w) 함수는 v를 변경함
# v가 새로운 w와 결합된 리스트로 변환됨
v.extend(w)
print(v)
실행 결과
[1, 2, 2, 3]
# numpy 패키지의 ndarray 타입을 사용!
# n-dimensional array(n차원 배열)
v = np.array([1, 2])
print('type:', type(v))
print('dimension:', v.ndim) # 몇 차원 배열?
print('shape: ', v.shape)
# 1차원 n배열에서 shape : 원소의 갯수 -> (행, 열)
출력 결과
type: <class 'numpy.ndarray'>
dimension: 1
shape: (2,)
w = np.array([
[1, 2],
[3, 4]
])
print('type: ', type(w))
print('dimension: ', w.ndim)
print('shape: ', w.shape)
# 2차원 n배열에서 shape : 원소의 갯수 -> (행 갯수, 열 갯수)
출력 결과
type: <class 'numpy.ndarray'>
dimension: 2
shape: (2, 2)
x = np.array([
[[1], [2]],
[[3], [4]]
])
print('type x: ', type(x))
print('dimension: ', w.ndim)
# shape : 저차원-> 고차원으로 가면서의 원소의 갯수 -> (규칙성이 있는 경우에만 출력)
type x: <class 'numpy.ndarray'>
dimension: 3
shape: (2, 2, 1)
# ndarray 타입을 이용한 벡터 연산
v = np.array([1, 2, 3]) # 두 list의 원소 수가 다르면 Error!
w = np.array([3, 4, 5])
vector_add = v + w
vector_sub = v - w
print('vector add =', vector_add) # 두 list를 옆에다 붙이는 것이 아니라, 벡터 연산을 함
print('vector subtract =', vector_sub)
vector add = [4 6]
vector subtract = [-2 -2 -2]
vectors = np.array([
[1, 2],
[3, 4]
])
np_sum = np.sum(vectors) # 2차원 배열 모든 원소들의 합
print('np_sum = ', np_sum)
np_sum = 10
np_sum_by_col = np.sum(vectors, axis=0) # axis = 0 : 열
print('np_sum_by_col =', np_sum_by_col)
np_sum_by_row = np.sum(vectors, axis=1) # axis = 1 : 행
print('np_sum_by_row =', np_sum_by_row)
np_sum_by_col = [4 6]
np_sum_by_row = [3 7]
v = np.array([1, 2, 3])
scalar_mul = 3*v
print('scalar multiplitcation = ', scalar_mul)
scalar multiplitcation = [3 6 9]
scalar_div = 3 / v
print('scalar division = ', scalar_div)
scalar division = [3. 1.5 1. ]
v = np.array([1, 2])
w = np.array([3, 4])
print('dot = 10', v.dot(w)) # dot: v와 w의 내적
dot = 10 11
# numpy를 사용한 벡터의 크기
def norm(v):
return sqrt(v.dot(v))
norm = 1.4142135623730951
# numpy를 사용한 두 벡터간의 거리:
def dist(v, w):
return norm(v - w)