밑바닥부터 시작하는 딥러닝 1권을 읽고 정리한 내용입니다.

목차

1장. 파이썬

파이썬

개발환경 준비

  • Python3
  • 아나콘다 배포판 3
  • numpy
  • matplotlib

넘파이

  • 넘파이는 외부라이브러리라서 'import'해주어야 한다.
    import numpy as np
  • 넘파이 배열 생성하기 : np.array() 메서드 이용, 파이썬의 리스트를 넘파이 라이브러리가 제공하는 특수 형태 배열로 반환한다
>>> import numpy as np
>>> x = np.array([1.0, 2.0, 3.0])
>>> print(x)
[1. 2. 3.]
>>> type(x)
<class 'numpy.ndarray'>
  • 넘파이 산술 연산 : 배열 x,y의 원소수가 같다면 산술연산이 실행된다. 넘파이 배열과 스칼라와의 계산도 가능한데, 이를 브로드캐스트 라고 한다.
>>> 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 - y
array([-1., -2., -3.])
>>> x * y
array([ 2.,  8., 18.])
>>> x / y
array([0.5, 0.5, 0.5])
>>> x / 2.0
array([0.5, 1. , 1.5])
  • 넘파이 N차원 배열 : 행렬의 형상은 shape, 행렬에 담긴 원소의 자료형은 dtype
>>> A = np.array([[1,2],[3,4]])
>>> print(A)
[[1 2]
 [3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')
  • 넘파이 N차원 배열 산술연산: 형상이 같은 행렬끼리면 마찬가지로 원소별 계산이며, 스칼라 값도 산술연산 가능하다(브로드캐스트).
>>> B = np.array([[3,0],[0,6]])
>>> A + B
array([[ 4,  2],
       [ 3, 10]])
>>> A * B
array([[ 3,  0],
       [ 0, 24]])
>>> A * 10
array([[10, 20],
       [30, 40]])
  • 브로드캐스트 : 위의 예시에서 A * 10을 보면, 10을 2 X 2로 확대한 후 연산이 이루어진다. 아래의 예시에서는 B를 2차원 배열인 A와 같은 형상으로 변형한 후 원소별 연산이 이뤄진다.
>>> A = np.array([[1,2],[3,4]])
>>> B = np.array([10,20])
>>> A * B
array([[10, 40],
       [30, 80]])
  • 원소 접근
>>> X = np.array([[51,55], [14,19], [0,4]])
>>> print(X)
[[51 55]
 [14 19]
 [ 0  4]]
>>> X[0]
array([51, 55])
>>> X[0][1]
55


>>> for r in X: # 반복문으로도 접근할 수 있다
...     print(r)
...
[51 55]
[14 19]
[0 4]

넘파이는 지금까지의 방법 외에도, 인덱스를 배열로 지정해 한 번에 여러 원소에 접근할 수 있다.

>>> X = X.flatten() # X를 1차원 배열로 평탄화
>>> print(X)
[51 55 14 19  0  4]
>>> X[np.array([0,2,4])] # 인덱스 0, 2, 4의 원소 
array([51, 14,  0]) 

이 기법을 통해 특정 조건에 만족하는 원소만 추출할 수 있다.

>>> X > 15 # 넘파이 배열에 부등호 연산자를 사용한 결과는 bool 타입 배열
array([ True,  True, False,  True, False, False])
>>> X[X>15]
array([51, 55, 19])

matplotlib

딥러닝 실험에서 중요한 그래프 그리기와 데이터 시각화 라이브러리.

  • 단순한 그래프 그리기 (sin 함수)

    >>> import numpy as np
    >>> import matplotlib.pyplot as plt
    
    # 데이터 준비
    >>> x = np.arange(0,6,0.1) # 0에서 6까지 0.1의 간격으로 생성
    >>> y = np.sin(x)
    
    # 그래프 그리기
    >>> plt.plot(x,y)
    [<matplotlib.lines.Line2D object at 0x7f91b4f70190>]
    >>> plt.show
    <function show at 0x7f91b4de2790>
    >>> plt.show()

  • pyplot의 기능: cos 함수를 추가로 그려본다. 또한 제목과 각 축의 이름 표시 등 pyploy의 다른 기능도 사용.

    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")  # cos함수는 점선으로 그리기
    plt.xlabel("x")  # x축 이름
    plt.ylabel("y")  # y축 이름
    plt.title('sin & cos')  # 제목
    plt.legend()
    plt.show()
    

  • 이미지 표시하기 : pyplot의 imshow()메서드로 이미지를 표시할 수 있고, 읽을 때는 matplotlib.image 모듈의 imread() 메서드를 이용한다.

    import matplotlib.pyplot as plt
    from matplotlib.image import imread
    img = imread('tree.png') # 현재 디렉토리에 있다고 가정, 경로 설정해주면 됨
    
    plt.imshow(img)
    plt.show()

profile
의미 있는 일을 하고싶은 개발자

0개의 댓글