Deep Learning

[밑바닥딥러닝1] 딥러닝을 위한 파이썬, 넘파이, matplotlib

마크투비 2021. 6. 29. 22:48

Chapter1 파이썬

1. 파이썬

  • 파이썬은 과학 분야, 특히 기계학습과 데이터 과학 분야에서 널리 쓰임
  • 파이썬은 동적 언어로 분류되는 프로그래밍 언어
    • 변수의 자료형을 상황에 맞게 자동으로 결정한다는 뜻

 

1) 슬라이싱

  • 파이썬 리스트에는 슬라이싱이라는 편리한 기법이 있음
a=[1, 2, 3, 4, 5]
a[0:2]

[1, 2]

a[:-1]

[1, 2, 3, 4]

 

2) 클래스

  • 개발자가 직접 클래스를 정의하여 독자적인 자료형을 만들 수 있음
  • 클래스 정의하는 방법
    • 파이썬에서는 메서드의 첫번째 인수로 자신을 나타내는 self를 명시적으로 쓰는 것이 특징

 

class 클래스이름:
    def __init__(self, 인수, ...): #__init__은 초기화용 메소드. 생성자라고도 함
        ...
    def 메서드 이름1(self, 인수, ...):
        ...
    def 메서드 이름2(self, 인수, ...):
        ...

 

2. 넘파이

  • 넘파이는 수치 계산용 라이브러리
  • 넘파이는 외부 라이브러리로 import를 해줘야 함
import numpy as np

x=np.array([1.0, 2.0, 3.0])
print(x)
type(x)

[1. 2. 3.]

numpy.ndarray

 

1) 넘파이의 산술 연산

  • 배열 x와 y의 원소 수가 같을 때 -> 각 원소에 대해서 행해짐
    • 원소별(element-wise) 연산

 

x=np.array([1.0, 2.0, 3.0])
y=np.array([2.0, 4.0, 6.0])
x+y #원소별 연산

array([3., 6., 9.])

 

  • 배열 x와 스칼라의 연산(원소 수가 같지 않을 때)
    • 스칼라 값과의 계산이 넘파이 배열의 원소별로 한 번씩 수행됨
    • ->브로드캐스팅

 

x=np.array([1.0, 2.0, 3.0])
x/2.0

(2, 2)

 

A.dtype

dtype('int32')

 

A+B

array([[ 4, 2],

        [ 3, 10]])

 

A*B

array([[ 3, 0],

        [ 0, 24]])

 

A*10

array([[10, 20],

        [30, 40]])

 

+ 더 알아보기 수학에서는 1차원 배열은 벡터(vector), 2차원 배열은 행렬(matrix), 또 벡터와 행렬을 일반화한 것을 텐서(tensor) 라고 한다. 구글의 딥러닝 프레임워크인 텐서플로의 이름이 여기서 유래했다.

 

3) 브로드캐스트

  • 행렬에 스칼라 값을 연산할 때, 스칼라 값이 행렬의 형상만큼 확대된 후 연산이 이루어짐

 

A=np.array([[1, 2], [3, 4]])
B=np.array([10, 20])
A*B

array([[10, 40],

        [30, 80]])

 

3. 맷플롯립(matplotlib)

  • matplotlib은 그래프를 그려주는 라이브러리

 

그래프 그리기

  • 그래프를 그리려면 matplotlib의 pyplot 모듈을 이욯

 

import numpy as np
import matplotlib.pyplot as plt

#데이터 준비
x=np.arange(0, 6, 0.1)
y=np.sin(x)

#그래프 그리기
plt.plot(x, y)
plt.show()

 

import numpy as np
import matplotlib.pyplot as plt

#데이터 준비
x=np.arange(0, 6, 0.1)
y1=np.sin(x)
y2=np.cos(x)

#그래프 그리기
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos")
plt.xlabel("x")
plt.xlabel("y")
plt.title('sin & cos')
plt.legend()
plt.show()