머신러닝

[머신러닝] python numpy 함수 선언

jmkimmessi 2020. 7. 18. 06:26
반응형

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으로 채움

 

 

 

반응형