CHAPTER 1 헬로 파이썬
1. 파이썬
파이썬(Python)
- 간단하고 배우기 쉬운 프로그래밍 언어
- 프로그래밍 입문자에게 최적 언어
2. 실행 방식
1) 인터프리터
대화모드: 개발자와 파이썬이 대화하듯 프로그래밍 할 수 있음
- 산술연산: 덧셈과 곱셈 등의 산술 연산
- 자료형(data type): 데이터의 성질을 나타내는 것/ 정수, 실수, 문자열 형태
- 변수(variable)
- 변수 사용하여 계산 OR 변수에 다른 값 대입할 수 있음
- 동적 언어: 변수의 자료형 -> 상황에 맞게 자동 결정
- 리스트(list)
- 인덱스: [] 안의 수/ 0부터 시작
- 슬라이싱(slicing): 범위 지정 -> 원하는 부분 리스트 얻을 수 있음
- 딕셔너리(dictionary): 키(key)와 값(value) -> 한 쌍으로 저장
- bool
- True와 False 두 값 중 하나 취함
- AND, OR, NOT 연산자 사용 가능
- if 문: 조건 따라 달리 처리 -> if/else 문 사용
- for 문: 반복(루프) 처리 사용
- 함수(function): 특정 기능 수행하는 일련의 명령 묶기 -> 하나의 함수로 정의
2) 스크립트 파일
- 파일로 저장
- ex. hungry.py
- 클래스(class)
- 개발자가 직접 클래스 정의 -> 독자적인 자료형 생성 가능
- 클래스 전용 함수(메서드)와 속성 정의 가능
- __init__ 메서드: 클래스 초기화하는 방법 정의
- 생성자(constructor): 초기화용 메서드/ 클래스의 인스턴스 만들어질 때 한 번만 불
3. 넘파이
넘파이
외부 라이브러리
*외부: 표준 파이썬에 포함X
넘파이의 배열 클래스: numpy.array
# numpy를 np라는 이름으로 가져와라
>>> import numpy as np
라이브러리 읽기 위해 import문 사용
=> np ~> 넘파이가 제공하는 메서드 참조O
2) 넘파이 배열 생성하기
넘파이 배열 -> np.array() 메서드 이용
np.array(): 파이썬의 리스트를 인수로 받기 -> 넘파이 라이브러리가 제공하는 특수한 형태의 배열(numpy.ndarray) 반환
>>> x = np.array([1.0, 2.0, 3.0])
>>> print(x)
[1. 2. 3.]
>>> type(x)
<class 'numpy.ndarray'>
3) 넘파이의 산술 연산
>>> 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 = y의 원소 수 (원소 3개씩 갖는 1차원 배열)
-> 산술 연산은 각 원소에 대해서 행해짐
- 원소별: element-wise
- 원소별 곱셈: element-wise product
넘파이 배열
- 원소별 계산
- 넘파이 배열과 수치 하나(스칼라값)의 조합으로 된 산술 연산
- 스칼라값의 계산이 넘파이 배열의 원소별로 한 번씩 수행 => 브로드캐스트
>>> x = np.array([1.0, 2.0, 3.0])
>>> x / 2.0
array([ 0.5, 1., 1.5])
4) 넘파이의 N차원 배열
다차원 배열 작성
# 2차원 배열(행렬)
>>> A = np.array([[1, 2], [3, 4]])
>>> print(A)
[[1 2]
[3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')
2x2의 A라는 행렬 작성
- 행렬의 형상: shpae
- 행렬에 담긴 원소의 자료형: dtype
>>> B = np.array([[3, 0], [0, 6]])
>>> A + B
array([[ 4, 2],
[ 3, 10]])
>>> A * B
array([[ 3, 0],
[ 0, 24]])
형상이 같은 행렬끼리 -> 행렬의 산술 연산도 대응하는 원소별로 계산 (~= 배열)
*형상: 행렬을 포함한 N차원 배열에서 그 배열의 '각 차원의 크기(원소 수)'
행렬과 스칼라값의 산술 연산O
-> 브로드캐스트 기능 작동
#2x2 행렬 A * 스칼라값 10
>>> print(A)
[[1 2]
[3 4]]
>>> A * 10
array([[ 10, 20],
[ 30, 40]])
NOTE
넘파이 배열(np.array): N차원 배열 작성O = 1차원 배열, 2차원 배열, 3차원 배열처럼 원하는 차수의 배열 만들 수O
1차원 배열: 벡터(vector)/ 2차원 배열: 행렬(martrix)/ 벡터와 행렬 일반화: 텐서(tensor)/ 3차원 배열: 다차원 배열
5) 브로드캐스트(broadcast)
형상이 다른 배열끼리 계산O
2x2 행렬 A * 스칼라값 10: 스칼라 값 10 -> 2x2 행렬로 확대된 후 연산
다른 예시
>>> A = np.array([[1, 2], [3, 4]])
>>> B = np.array([10, 20])
>>> A * B
array([[ 10, 40],
[ 30, 80]])
1차원 배열 B -> 배열 A와 같은 형상으로 변형된 후 원소별 연산
6) 원소 접근
원소의 인덱스는 0부터 시작
>>> X = np.array([[51, 55], [14, 19], [0, 4]])
>>> print(X)
[[51 55]
[14 19]
[ 0 4]]
>>> X[0] # 0행
array([51, 55])
>>> X[0][1] # (0, 1) 위치의 원소
55
# for문으로 각 원소에 접근
>>> for row in X:
... print(row)
...
[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 이상인 값만 구하기
>>> X > 15
array([ True, True, False, True, False, False], dtype = bool)
>>> X[X>15]
array([51, 55, 19])
넘파이 배열에 부등호 연산 수행 -> 배열의 원소에 각각 부등호 연산을 수행한 bool 배열 생성
bool 배열 사용 -> 배열 X에서 True에 해당하는 원소, 값이 115보다 큰 원소만 꺼내기
NOTE
처리속도: 파이썬(동적 언어) < C/C++(정적 언어(컴파일 언어))
빠른 성능 요구 -> 해당 부분 C/C++로 구현 => 파이썬은 C/C++로 쓰인 프로그램 호출해주는 '중개자' 역할
넘파이: 주된 처리 -> C/C++로 구현 => 성능 해치지X, 파이썬 편리한 문법 사용O
4. matplotlib
matplotlib
- 그래프를 그려주는 라이브러리
- 그래프 그리기와 데이터 시각화 쉬워짐
1) 단순한 그래프 그리기
그래프 그리기: matplotlib의 pyplot 모듈 이용
- 넘파이의 arrange 메서드 -> [0, 0.1, 0.2, ..., 5.8, 5.9] 데이터 생성 -> 변수 x에 할당
- x의 각 원소에 넘파이의 sin 함수인 np.sin() 적용 -> 변수 y에 할당
- x와 y를 인수로 plt.plot 메서드 호출 -> 그래프
- plt.show() 호출 -> 그래프를 화면에 출력
2) pyplot 기능
- cos 함수 그리기
- 제목, 각 축의 이름(레이블) 표시 등 pyplot 다른 기능 사용
3) 이미지 표시하기
- pyplot에는 이미지 표시해주는 메서드인 imshow()
- 이미지 읽어오기: matplotlib.image 모듈의 imread() 메서드 이용
정리
- 파이썬: 간단하고 익히기 쉬운 프로그래밍 언어
- 파이썬: 오픈 소스여서 자유롭게 사용할 수 있음
- 외부 라이브러리: 넘파이, matplotlib 이용
- 파이썬 실행 방식 2가지: 인터프리터/ 스크립트 파일
- 파이썬: 함수와 클래스 같은 모듈로 구현 정리O
- 넘파이: 다차원 배열 다루는 편리한 메서드 제공
출처
https://github.com/WegraLee/deep-learning-from-scratch
'Artificial Intelligence' 카테고리의 다른 글
[혼자 공부하는 머신러닝+딥러닝] Chapter 04 다양한 분류 알고리즘 (0) | 2024.07.25 |
---|---|
[혼자 공부하는 머신러닝+딥러닝] Chapter 03 회귀 알고리즘과 모델 규제 (0) | 2024.07.25 |
[밑바닥부터 시작하는 딥러닝] CHAPTER 2 퍼셉트론 (0) | 2023.03.30 |
[머신러닝 교과서 with 파이썬, 사이킷런, 텐서플로] 2장 간단한 분류 알고리즘 훈련 (0) | 2023.03.16 |
[머신러닝 교과서 with 파이썬, 사이킷런, 텐서플로] 1장 컴퓨터는 데이터에서 배운다 (1) | 2023.03.16 |