본문 바로가기
STUDY/DL

[밑바닥부터 시작하는 딥러닝 1] CH1.헬로 파이썬

by univus 2023. 1. 17.

한빛 미디어의 밑바닥부터 시작하는 딥러닝을 읽고 모르는 부분을 공부한 내용입니다.

 

 

 

 

  • 탭 대신 공백문자를 권장하는 이유

파이썬 코딩 스타일 가이드(PEP 8)에 4 spaces를 사용하라고 명시되어있다.

 

https://peps.python.org/pep-0008/#indentation

 

 

  • 파이썬 클래스

- 직접 클래스를 정의하여 독자적인 자료형을 만들고 그 클래스만의 전용 함수(메서드)와 속성을 정의할 수 있음

- 객체 (Object): 어떠한 속성값과 행동을 가지고 있는 데이터

- 메서드(Method): 클래스 안에 구현된 함수

- 객체변수 : 객체에 생성되는 객체만의 변수(클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지)

- 생성자(Constructor) : 객체가 생성될 때 자동으로 호출되는 메서드(객체가 생성되는 시점에 자동으로 호출, 초깃값을 설정해야 할 필요가 있을 때 사용)

 

 

class FourCal:
	def __init__(self, first, second): # 생성자
		self.first = first
		self.second = second
	def div(self): # 메서드
		result = self.first / self.second
	return result
    
a = FourCal(4, 2)
print(a.first) # a의 객체변수 first, second
# 4
print(a.second)
# 2
print(a.div())
# 2

 

 

+) 
객체 = 속성(변수) + 메서드(함수)
    - 속성 (attribute) : 객체의 특징 또는 객체에 관해 알고 있는 사항 (객체 안에 포함된 변수/데이터)
    - 메서드 (method) : 파이썬에서 행동 또는 객체에 대해, 객체를 통해 할 수 있는 것. 어떤 일을 하기 위해 호출(call)할 수 있는 코드 덩어리입니다. 즉 메서드는 객체 안에 포함된 함수

++) 객체와 인스턴스의 차이 (클래스로 만든 객체=인스턴스)
a = Cookie() 에서, 
a는 객체, a는 Cookie의 인스턴스
 : 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용

 

 

- 상속(Inheritance) : 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것

- 메서드 오버라이딩(Overriding, 덮어쓰기) : 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것(오버라이딩한 메서드가 호출)

 

class FourCal:
	def __init__(self, first, second):
		self.first = first
		self.second = second
	def div(self): 
		result = self.first / self.second
	return result

class SafeFourCal(FourCal): # FourCal 클래스(부모)를 상속하는 SafeFourCal 클래스(자식)
	def div(self):
		if self.second == 0:  # 나누는 값이 0인 경우 0을 리턴하도록 수정
			return 0
		else:
			return self.first / self.second
            
a = SafeFourCal(4, 0)
a.div()
# 0

 

+) 상속을 사용하는 이유
기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용

 

 

- 클래스 변수 : 클래스 안에 변수를 선언하여 생성, 클래스 변수는 클래스로 만든 모든 객체에 공유

- 객체변수는 클래스 변수와 동일한 이름으로 생성할 수 있음

 

class Family:
	lastname = "김"
    
    
a = Family()
b = Family()
print(a.lastname)
# 김
print(b.lastname)
# 김

Family.lastname = "박"
print(a.lastname) # 클래스 변수 값을 변경했더니 클래스로 만든 객체의 lastname 값도 모두 변경된다
# 박
print(b.lastname)
# 박

a.lastname = "최" # a 객체에 lastname이라는 객체변수가 새롭게 생성
print(a.lastname)
최
print(Family.lastname) # a.lastname 객체변수를 생성하더라도 Family 클래스의 lastname과는 상관없음print(b.lastname)
박

 

https://wikidocs.net/28

 

 

  • numpy = Numerical Python

 

 

  • tensor는 벡터와 행렬을 일반화 한 것

벡터 공간와 그 쌍대 공간에 대하여 음이 아닌 정수 m, n마다 (m, n)형의 텐서는 벡터 공간

의 원소로 정의된다.

https://ko.wikipedia.org/wiki/%ED%85%90%EC%84%9C#%EC%A0%95%EC%9D%98

 

 

  • 파이썬 동적언어는 C, C++ 같은 정적언어(컴파일 언어)보다 처리 속도가 늦다

이유

- 파이썬은 동적 언어이므로

- 파이썬은 인터프리터 형식이므로

- 비효율적인 메모리 액세스가 발생할 수 있으므로

https://medium.com/@cookatrice/why-python-is-slow-looking-under-the-hood-7126baf936d7

 

 

+) 동적 언어란?
변수를 정의할 때 자료형을 굳이 명시하지 않아도 됨

++) 저급 언어와 고급 언어 
- 저급 언어(low-level language) : 프로그래밍 언어의 문법 구조가 기계어와 유사
    - 기계어(Machine Language) : 컴퓨터의 CPU가 명령을 처리할 때 사용하는 언어로 이진화된 숫자(2진법)로 구성
    - 어셈블리어(Assembly Language) : 기계어에서 숫자를 의미 있는 단어로 바꿔서 사람들이 이해하기 쉽게 만든 언어
    - 어셈블러(assembleer) : 어셈블리어를 기계어로 번역하는 프로그램

- 고급 언어(high-level language) : 사람들이 이해하기 편하도록 만들어진 프로그래밍 언어

+++) 인터프리터와 컴파일러 : 고급 언어를 저급언어로 변환
- 인터프리터(interpreter) : 고급 언어로 작성된 프로그램을 한줄씩 번역해서 OS에서 인식하는 기계어로 변역
    - 프로그램이 직접 실행되므로 목적 프로그램은 생성되지 않음
    - 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠름
    - 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느림
    - CPU의 사용시간의 낭비가 큼

- 컴파일러 : 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후(컴파일), 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성(번역과 실행이 따로 이루어짐)
    - 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 실행파일을 실행하므로 실행 속도가 빠름
    - 고급언어를 기계어로 번역하며 만든 오브젝트 코드(Object Code)를 묶어서 하나의 실행 파일로 다시 만드는 링킹(Linking) 이라는 작업을 거침
    - 인터프리터 보다 많은 메모리를 사용

*java
- java 컴파일러는 .java의 소스 파일을 .class 파일로 변환
- java 인터프리터는 바이트코드로 작성된 클래스 파일을 특정 환경의 기계에서 실행될 수 있도록 기계어로 변환

https://jhnyang.tistory.com/40

 

 

'STUDY > DL' 카테고리의 다른 글

[밑바닥부터 시작하는 딥러닝 1] CH2.퍼셉트론  (0) 2023.01.17