반응형
import numpy
numpy 라이브러리를 선언하는 방법은 아래와 같다.
import numpy
import numpy as np
vector
import numpy as np
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
# vector A, B 출력
print("A ==", A, ", B == ", B)
# vector A, B 형상 출력 => shape
print("A.shape ==", A.shape, ", B.shape ==", B.shape)
# vector A, B 차원 출력 => ndim
print("A.ndim ==", A.ndim, ", B.ndim ==", B.ndim)
# vector 산술 연산
print("A + B ==", A+B)
print("A - B ==", A-B)
print("A * B ==", A*B)
print("A / B ==", A/B)
.array로 선언 시 하나의 행으로만 선언을 하면 행렬이 아닌 벡터이다.
vector 형상 출력 -> shape
vector 차원 출력 -> ndim
벡터는 사칙 연산도 가능하다.
import numpy as np
A = np.array([ [1, 2 ,3], [4, 5, 6] ])
B = np.array([ [-1, -2, -3], [-4, -5, -6] ])
# matrix A, B 형상 출력 => shape
print("A.shape ==", A.shape, ", B.shape ==", B.shape)
# matrix A, B 차원 출력 => ndim
print("A.ndim ==", A.ndim, ", B.ndim ==", B.ndim)
# vector 생성
C = np.array([1, 2, 3])
# vector C형상 출력 => shape
print("C.shape ==", C.shape)
# vector를 (1,3) 행렬로 형 변환
C = C.reshape(1, 3)
print("C.shape ==", C.shape)
vector나 matrix를 형 변환을 시키려면 reshape함수를 이용한다.
이때 vector는 형 변환 후 matrix가 된다.
행렬 합
import numpy as np
A = np.array([ [1, 0], [0, 1] ])
B = np.array([ [1, 1], [1, 1] ])
print(A + B)
행렬 곱 (dot product)
import numpy as np
A = np.array([[1,2,3],[4,5,6]])
B = np.array([[-1,-2],[-3,-4],[-5,-6]])
C = np.dot(A,B) # 행렬 곱 수행
print("A shape ==", A.shape,"B shape ==", B.shape)
print("C shape ==", C.shape)
print(C)
dot(A,B)로 선언한다.
broadcast
import numpy as np
A = np.array([[1,2],[3,4]])
b = 5
print(A+b)
C = np.array([[1,2],[3,4]])
D = np.array([4,5])
print(C+D)
shape이 서로 다른 두 행렬 간에 사칙연산이 가능하다 (dot product는 안됨)
concatenate
import numpy as np
A = np.array([ [10,20,30], [40,50,60] ])
print(A.shape)
row_add = np.array([70,80,90]).reshape(1,3)
column_add = np.array([1000, 2000]).reshape(2, 1)
print(column_add.shape)
# axis = 0 행(row) 기준
B = np.concatenate((A, row_add), axis = 0)
print(B)
# axis = 1 열(column) 기준
C = np.concatenate((A, column_add), axis = 1)
print(C)
행렬에 열 또는 행을 추가한다.
.concatenate(행렬, row or column _add, axis = 0 or 1)
axis = 0 행(row) 기준
axis = 1 열(row) 기준
random.rand
import numpy as np
random_number1 = np.random.rand(3)
random_number2 = np.random.rand(1, 3)
random_number3 = np.random.rand(3, 1)
0 ~ 1 사이의 난수를 생성한다.
transpose
import numpy as np
A = np.array([[1,2],[3,4],[5,6]])
B = A.T # A의 전치 행렬
print("A shape ==", A.shape, ", B shape ==", B.shape)
print(A)
print(B)
# vector 전치행렬
C = np.array([1, 2, 3, 4, 5]) # vector, matrix 아님
D = C.T # C는 vector이므로 transpose 안됨
E = C.reshape(1, 5) # C를 matrix로 바꿈
F = E.T # E의 전치행렬
[변수]. T로 선언한다.
iterator
import numpy as np
A = np.array([ [10, 20, 30, 40], [50, 60, 70, 80] ])
print(A, "\n")
print("A.shape ==", A.shape, "\n")
# 행렬 A 의 itrator 생성
it = np.nditer(A, flags=['multi_index'], op_flags=['readwrite'])
while not it.finished:
idx = it.multi_index
print("current value => ", A[idx])
it.iternext()
행렬의 모든 원소를 access 하는 경우에 iterator를 쓴다.
loadtxt
import numpy as np
loaded_data = np.loadtxt('../data-01.csv', delimiter=',', dtype=np.float32)
x_data = loaded_data[ :, 0:-1]
t_data = loaded_data[ :, [-1]]
# 데이터 차원 및 shape 확인
print("x_data.ndim = ", x_data.ndim, ", x_data.shape = ", x_data.shape)
print("t_data.ndim = ", t_data.ndim, ", t_data.shape = ", t_data.shape)
머신러닝 코드에서 입력 데이터와 정답 데이터를 분리하는 프로그래밍 기법
indexing, slicing
import numpy as np
A = np.array([10,20,30,40,50,60]).reshape(3,2)
print("A.shape ==", A.shape)
print(A)
print("A[0,0] ==", A[0,0], ", A[0][0] ==", A[0][0])
print("A[2,1] ==", A[2,1], ", A[2][1] ==", A[2][1])
print("A[0:-1, 1:2] ==", A[0:-1, 1:2])
print("A[:, 0] ==",A[:, 0])
print("A[:, :] ==", A[:, :])
행렬에서 자유롭게 행렬의 원하는 부분을 indexing 하고 slicing 할 수 있다.
그 외에 유용한 함수들
import numpy as np
X = np.array([2, 4, 6, 8])
print("np.sum(X) ==", np.sum(X)) # 모든 원소의 합
print("np.exp(X) ==", np.exp(X)) # 각 값의 e^x 값
print("np.log(X) ==", np.log(X)) # 각 값의 로그 값
print("np.max(X) ==", np.max(X)) # 최댓값
print("np.min(X) ==", np.min(X)) # 최솟값
print("np.argmax(X) ==", np.argmax(X)) # 최댓값이 index
print("np.argmin(X) ==", np.argmin(X)) # 최솟값의 index
X = np.array([ [2, 4, 6], [1, 2, 3], [0, 5, 8] ])
print("np.max(X) ==", np.max(X, axis=0)) # axis=0, 열기준
print("np.min(X) ==", np.min(X, axis=0)) # axis=0, 열기준
print("np.max(X) ==", np.max(X, axis=1)) # axis=1, 행기준
print("np.min(X) ==", np.min(X, axis=1)) # axis=1, 행기준
print("np.argmax(X) ==", np.argmax(X, axis=0)) # axis=0, 열기준
print("np.argmin(X) ==", np.argmin(X, axis=0)) # axis=0, 열기준
print("np.argmax(X) ==", np.argmax(X, axis=1)) # axis=1, 행기준
print("np.argmin(X) ==", np.argmin(X, axis=1)) # axis=1, 행기준
A = np.ones([3,3]) # 모든 원소를 1로 채움
print("A.shape ==", A.shape, ", A ==", A)
B = np.zeros([3,2]) # 모든 원소를 0으로 채움
print("B.shape ==", B.shape, ", B ==", B)
sum() : 모든 원소의 합
exp() : 각 값의 e^x 값
log() : 각 값의 log 값
max() : 최댓값
min() : 최솟값
argmax() : 최댓값의 index
argmin() : 최솟값의 index
ones() : 모든 원소를 1로 채움
zeros() : 모든 원소를 0으로 채움
반응형
'머신러닝' 카테고리의 다른 글
[머신러닝] 신경망, 인공지능, 딥러닝 (0) | 2020.07.26 |
---|---|
[머신러닝] 로지스틱 회귀 - 분류, 시그모이드 함수, 손실 함수 (0) | 2020.07.24 |
[머신러닝] 선형 회귀- 손실 함수, 경사 하강법 (0) | 2020.07.20 |
[머신러닝] python matplotlib 사용법 - line plot, scatter plot (0) | 2020.07.19 |
[머신러닝] 수치 미분 - 편미분, 연쇄 법칙 (0) | 2020.07.18 |