오뚝이개발자

[CH1] Numpy, Matplotlib 실습 본문

AI/밑바닥딥러닝1

[CH1] Numpy, Matplotlib 실습

땅어 2020. 6. 9. 18:04
728x90
300x250

Numpy란?


배열과 행렬 계산에 유용한 라이브러리로 일반적으로 아래와 같이 import 해준다.

import numpy as np

 

Numpy의 배열 생성(np.arrary())


np.array() 메서드는 리스트를 인수로 받아 넘파이의 특수한 형태의 배열(numpy.ndarray)을 반환한다.

# np.array() 실습
X = np.array([1.0, 2.0, 3.0])
print(X)    # [1. 2. 3.]
print(type(X))  # <class 'numpy.ndarray'>

 

Numpy 배열 간 산술연산


numpy 배열 간의 산술연산은 element-wise 연산 즉, 원소별 연산이다. 주의할 점은 연산을 하는 배열(행렬)의 형상이 같아야 한다. 여기서 형상이란 N차원 배열에서 각 차원의 크기(원소수)이다.

# Numpy 산술연산 실습
# 행렬의 형상(N차원 행렬에서 각 차원의 크기)이 같아야만 연산가능
x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
print(x+y)  # [3. 6. 9.]
print(x*y)  # [2. 8. 18.]
print(x/2.0)    # [0.5 1. 1.5]

 

N차원 배열 생성


# N차원 배열 생성 실습
A = np.array([[1,2],[3,4]])
print(A)
print(A.shape)  #(2,2)
print(A.dtype)  #int32
B = np.array([[3,0],[0,6]])
print(A+B)  #[[4 2], [3 10]]
print(A*B)  # [[3 0], [0 24]]

A.shape은 행렬의 형상을, A.dtype은 원소의 데이터 타입을 알려준다.

 

브로드캐스트(Broadcast)


앞서 행렬 간 연산 시엔 행렬의 형상이 같아야 한다고 했다. 그런데 이러한 형상을 맞추어 계산이 가능토록 해주는 기능이 바로 브로드캐스트이다.

# 브로드캐스트 실습

# 행렬과 스칼라 연산
A = np.array([[1,2],[3,4]])
print(A*10) #[[10 20], [30 40]]

# 형상이 다른 행렬 간 연산
C = np.array([[1,2],[3,4]])
D = np.array([10,20])
print(C*D)  # [[10 40], [30 80]]

그림으로 알아보면 아래와 같다. 빨강색으로 표시된 칸들이 브로드캐스트에 의해 형상이 변경된 부분이다.

 

Numpy 행렬 원소 접근


# 원소 접근
Y = np.array([[51, 55], [14, 19], [0, 4]])
print(Y[0]) # [51 55]
print(Y[0][1])  # 55
for row in Y:
    print(row)

일반적으로 파이썬의 다차원 리스트의 원소 접근과 동일하다. 그러나 numpy만의 특별한 원소접근법이 하나 있다. 바로 인덱스를 배열로 지정해 여러 개의 원소에 한 번에 접근하는 방법이다.

# Numpy만의 특이한 원소 접근법(인덱스를 배열로 지정해 여러 개 접근)
Y = Y.flatten() # 1차원 배열로 평탄화 [51 55 14 19 0 4]
print(Y[[0,2,4]])   # 인덱스가 0,2,4인 원소에 접근
print(Y>15) # [True True False True False False]
print(Y[Y>15])

 

Matplotlib란?


matplotlib은 그래프 그리기데이터 시각화에 유용한 라이브러리다.

 

matplotlib.pyplot을 이용해 그래프 그리기


# 그래프 그리고 각 축의 이름, 레이블, 그래프 제목 표시
z = np.arange(0, 6, 0.1)
y1 = np.sin(z)
y2 = np.cos(z)

plt.plot(z, y1, label="sin")
plt.plot(z, y2, label="cos")
plt.xlabel("z")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend()
plt.show()

pyplot으로 그린 sin, cos 그래프

 

matplotlib.image를 이용한 이미지 표시하기


# 이미지 표시하기
import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread('dog.png') # 적절한 경로 설정해서 넣어주기
plt.imshow(img)
plt.show()

 

텐서란?


일반적으로 1차원 배열을 벡터, 2차원 배열을 행렬이라고 한다. 텐서란 이러한 벡터와 행렬을 일반화한 것이다. 구글의 유명한 프레임워크인 텐서플로는 이러한 텐서가 신경망을 타고 흐른다(flow)는 것에서 유래하였다.

 

 

728x90
300x250

'AI > 밑바닥딥러닝1' 카테고리의 다른 글

[CH6] 학습 관련 기술들  (0) 2020.06.21
[CH5] 오차역전파법  (0) 2020.06.20
[CH4] 신경망 학습  (0) 2020.06.19
[CH3] 신경망  (0) 2020.06.13
[CH2] 퍼셉트론(Perceptron)  (0) 2020.06.10
Comments