ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ Python ] 선형대수학 X 파이썬 | 시각화
    Python 2024. 11. 11. 16:18

    군 내 특성상 아이패드, 사지방 컴퓨터를 이용하여 작성함.  본 내용은 자기개발 목적으로 책 '개발자를 위한 실전 선형대수학-한빛미디어', 유튜브 등을 참고하였음.

     

     선형대수학을 직관으로 이해하기 위해 코딩 학습과 병행하기로 했다.

    머신러닝에서 주로 사용되는 파이썬을 같이 공부하는 것이므로 병행학습 효과가 기대된다.

     

     컴퓨터에 따로 설치가 힘드므로 웹에서 실행 가능한 환경(IDE)을 찾았다.

    선형대수학의 특성상 그림으로 표현하는 경우가 잦아 책에서 추천한 구글의 Colab을 사용하려 한다.

    본 글은 파이썬 기초 학습이 아닌 선형대수 공부를 위한 복습과 선행 학습이므로 책의 내용 중에서 기억해야 하거나 몰랐던 부분을 담았다.

     

     

    Python은 객체 지향 언어이다.

     객체 지향 언어(프로그래밍)란, 프로그램을 단순히 데이터로 표기하고 순서대로 처리하는 것이 아닌, 프로그램을 수많은 '객체( '메소드, 변수'를 가지며 특정 역할을 수행하도록 정의된 개념)'라는 기본 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다.

     

     객체 지향 언어의 특징으로는 추상화, 상속, 다형성, 캡슐화가 있다.

    이러한 특징으로 소프트웨어를 개발하면 코드의 재사용을 통해 반복적인 코드를 최소화하고, 보다 유연하고 변경이 용이한 프로그램을 만들 수 있다.

     

     

     

    인덱싱 리스트의 특정 요소(벡터, 행렬을 포함한 데이터 타입)에 접근하는 것.
    aList = [ 20, 1, 4 ]
    aList[1]

    위와 같은 코드를 입력하면 '1'이 나온다. 이처럼 리스트의 특정 요소에 '접근'하는 것을 인덱싱이라 한다.

     


     

    함수 함수는 객체 지향 프로그래밍과 클래스의 핵심 부분이다.
    output1 + output2 = functionname(input1,input2,input3)

    함수의 일반적인 구조는 위와 같다.

     

    alpha = [ 'aa','bb' ]
    print(alpha)
    
    alpha.append( 'cc' )
    print(alpha)
    
    >> ['aa','bb']
    ['aa','bb','cc']

    리스트 데이터 타입에는 요소를 추가하는 append 메서드가 존재한다.

    def add2numbers(n1,n2)
        total = n1 + n2
        print(total)
        return total

    def를 사용하여 함수를 정의하면 함수를 만들 수 있다.

    s = add2numbers(3,5)
    print(s)
    
    >> 8
    8

    위에서 정의한 함수를 통해 return total, print(s)으로부터 숫자 8이 두 번 출력된다.

     


     

    라이브러리 : 특정 주제에 초점을 맞춘 함수 모음. 대표적으로 선형대수학에서 필요로 하는 *Numpy가 있음.
    *Numpy(Numerical Python) : 수치 해석을 위한 파이썬
    import libraryname as abbrevi-ation
    
    import numpy as np

    파이썬으로 라이브러리를 가져오려면 import를 이용하면 된다. 기본적인 공식은 위 코드의 첫 줄에 있다.

     

    Numpy의 인덱싱과 슬라이싱
    ary = np.arange(-4, 5)
    print(ary)
    print(ary[5])
    
    >> [ -4 -3 -2 -1 0 1 2 3 4 ]
    1

    위 코드블럭에서 인덱싱을 보이기 위해 np.arange 함수를 사용하여 -4부터 4까지의 정수 배열을 만들었다.

    파이썬은 사용자가 지정한 상한은 포함하지 않는 배타적 상한을 사용한다. (+4가 아닌 +5로 표기한 이유이다.)

     

    ary[0:3]
    
    >> array([-4,-3,-2])

    슬라이싱은 시작 인덱스와 끝 인덱스를 지정한다. [start:stop]

    ary[0:5:2]
    
    >> array([-4, -2, 0])

    위 코드블럭에서 건너뛰기(skip)을 사용할 수 있는데, [start:stop:skip]으로 나타낸다.

    따라서 ary[::-1]를 사용하면 전체 배열을 거꾸로 실행할 수 있다.

     


     

    시각화 파이썬의 데이터 시각화는 Matplotlib 라이브러리로 처리된다.

    Matplotlib library를 사용하여 그래프를 시각화한 모습. (Colab에서 실행했다.)

    4행에서 k는 검은색, o는 원을 뜻한다. (o는 원, s는 사각형, p는 오각형이다.)

    5행은 좌표 (0,0)에서 (2,4)로 가는 선을 뜻한다. r--은 빨간색 점선이란 뜻이다.

     

    하위 도표와 이미지를 시각화한 모습.

    1행에서 하위 도표를 만든다. plt.subplots에서 처음 두 입력은 하위 도표 1 × 2 행렬을 지정하며, figsize는 그림의 전체 크기를 지정한다. 이 튜플의 두 요소는 항상 순서대로 너비와 높이이다.

    plt.subplots은 전체 그림에 대한 *핸들을 반환한다. 하지만 이 코드에서는 변수 대신 밑줄을 사용했다.

    두 번째로 각 축에 대한 핸들을 포함하는 Numpy 배열을 출력한다.(*핸들은 그림에서 객체를 가리키는 특수한 타입의 변수이다.)

     

    2행에서는 전체가 아닌 특정 축에 plt.가 사용됐다. 또 개별 숫자 대신 행렬을 입력한 모습이다.

    파이썬은 행렬의 각 열에 대해 별도의 선을 생성한다.

     

    3행에서는 이미지를 생성한다. 그림의 작은 블록의 색상은 행렬의 숫잣값에 매핑된다.

     


     

    수식을 시각화하기
    y = x**2

    위 함수를 시각화(그래프화) 해보자. 함수를 시각화하기 위해서는 x의 범위를 정의해야한다.

     

    y=x^2를 시각화 한 모습

     

    np.linspace() 함수를 사용하여 -4와 +4 사이에 더 많은 점을 넣을 수 있다.(그래프를 매끄럽게 할 수 있다.)

    np.linspace()를 사용한 모습.

     

    np.linspace()에서 시작값, 종료값, 점의 개수를 입력으로 한다.

     


    참고

    시그모이드 함수

Designed by Tistory.