꿈이 너무 많은 한 대학생의 공간

밑바닥부터 시작하는 딥러닝 1 - 1. 헬로 파이썬 본문

인공지능/밑바닥부터 시작하는 딥러닝

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

청울울청 2020. 6. 21. 14:42

1. 산술 연산

print(1-2) # -1
print(1+2) # 3
print(1*2) # 2
print(1/2) # 0.5

파이썬에서는 간결하게 사칙연산을 할 수 있습니다.

 

2. 자료형

print(type(10)) # class 'int'
print(type(2.718)) # class 'float'
print(type("Hello World")) # class 'str'

 

위와 같이 빠르게 타입을 확인할 수 있습니다.

 

3. 변수

x = 10
print(x) # 10

x = 100
print(x) # 100

y = 3.14
print(x*y) # 314.0

변수를 선언해 값을 대입하고 연산할 수 있습니다.

또한 다른 언어와는 다르게 변수의 타입을 설정할 필요가 없으며 대입된 값에 따라 자동으로 타입이 결정됩니다.

 

4. 리스트

a = [1, 2, 3, 4, 5]
print(a) # [1, 2, 3, 4, 5]
print(len(a)) # 5
print(a[0]) # 1
print(a[4]) # 5
a[4] = 6
print(a[4]) # 6

[ 값, 값, 값 ] 형태로 리스트를 작성할 수 있습니다.

배열의 길이를 가져오거나, 선언 후 특정 인덱스의 값을 변경할 수 있습니다.

 

5. 딕셔너리

person = {"height": 170, "weight": 65}
print(person["height"]) # 170
print(person["weight"]) # 65
print(person) # {'height': 170, 'weight': 65}

person["weight"] = 70
print(person) # {'height': 170, 'weight': 70}

{"키" : (값), "키" : (값)} 의 형태로 딕셔너리를 선언할 수 있습니다.

키 값은 (변수명) ["키값"] 의 형태로 접근할 수 있으며, 변경 또한 가능합니다.

 

6. Boolean

hungry = True
sleepy = False

if hungry:
	print("I'm Hungry!!") # I'm Hungry!!

제가 파이썬에서 제일 아쉬운 점은 조건문에서의 블럭이 매우 중요해지는 것입니다.

즉, Tab 으로 제대로 간격을 놓아야 코드가 작동합니다. 

개인적으로 자유로운 문법의 JS를 사용하다가 Python을 다시 사용하니 불편한 감이 없지 않아 있네요...

 

7. if 조건문

hungry = True

if hungry:
	print("I'm Hungry!!") # I'm Hungry!!

조건에 따라 처리할려면 if / else 문을 사용합니다.

6번에서의 코드와 동일합니다.

if (조건) :

         (코드)

 

의 형식으로 코드 앞에는 반드시 탭을 한번 눌러 공백을 띄워주셔야 합니다.

 

8. for 조건문

for i in [1, 2, 3]: # for i in range(1, 4) 와 동일함
	print(i) 
# 1
# 2
# 3

for i in [배열] 을 사용하면 배열 하나하나의 요소를 i 에 대입해 코드에서 실행할 수 있습니다.

이는 in range(숫자1, 숫자2) 로도 구현이 가능하며 (숫자2 - 숫자 1 번) 만큼 반복합니다.

 

9. 함수

def hello():
	print("Hello")
    
hello() # Hello

어떠한 코드를 묶어 함수로 정의할 수 있습니다.

 

10. 클래스

class Man:
	def __init__(self):
    		self.name = name
        	print("Initialized")
   	def hello(self):
    		print("Hello " + self.name + "!")
    	def goodbye(target):
    		print("Good-Bye " + target + "!")

man = Man("David")
m.hello() # Hello David!
m.goodbye("Minsu") # Good-Bye Minsu!

class (클래스이름) : 

                    (기능) 

형태로 클래스를 선언할 수 있습니다.

__init__ 함수는 클래스의 생성시 실행되는 함수입니다.

클래스 내에서 구현한 함수는 (클래스명).(함수명) 으로 선언할 수 있으며 이때 인자로 들어간 self 는 자신의 클래스인 man 를 의미합니다. 함수를 만들때마다 꼭 포함하지 않아도 되며, 필요시에만 작성하시면 됩니다.

 

11. numpy 사용하기

import numpy as np

x = np.array([1.0, 2.0, 3.0])
print(x) # [1. 2. 3.]
type(x) # numpy.ndarray

numpy를 이용하면 복잡한 계산을 빠르게 할 수 있습니다.

np.array 로 numpy 배열을 생성할 수 있습니다.

import numpy as np

x = np.array([1.0, 2.0, 3.0])
print(x) # [1. 2. 3.]
y = np.array([2.0, 3.0, 4.0])
print(y) # [2. 3. 4.]
print(x+y) # [3. 5. 7.]

위와 같이 선언하면 배열과 배열간의 사칙연산을 간단히 할 수 있습니다.

 

12. numpy의 다차원 배열

A = np.array([[1, 2], [3, 4]])

print(A) 
# [[1 2]
#  [3 4]]
A.shape # (2, 2)
A.dtype # int64

numpy에서도 다차원 배열을 사용할 수 있습니다.

np.array에 원하는 형태의 배열을 입력하면 다차원 배열이 완성됩니다.

(배열명).shape 를 사용해 배열이 x, y 축으로 몇차원인지 확인할 수 있습니다.

A = np.array([[1, 2], [3, 4]])

print(A) 
# [[1 2]
#  [3 4]]
print(A[0][1]) # 2
A.shape # (2, 2)
A.dtype # int64

B = np.array([[3, 0], [0, 6]])
print(A+B)
# array([[4, 2],
#        [3, 10]])
print(A*B)
# array([[3, 0],
#        [3, 24]])

또한 배열간의 연산 또한 가능합니다.

넘파이에서는 1차원, 2차원 배열 등에 따라 명칭이 부여되어 있습니다.
1차원 배열은 벡터(Vector), 2차원 배열은 행렬(Matrix), 1차원 배열과 2차원 배열(벡터와 행렬) 이 일반화된 것을
텐서(Tensor) 라고 부릅니다.

또한 2차원 배열에서는 (배열명)[인덱스][인덱스] 형태로 다차원 배열에서의 접근이 가능합니다.

 

13. 브로드캐스트

넘파이에서는 형상이 다른 배열끼리도 연산이 가능합니다.

즉, 1차원 배열과 2차원 배열을 곱할 수 있습니다.

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

print(A * B)
# array([10, 40]
#       [30, 80]])

위와 같이 1차원 배열 B의 요소가 2차원 배열의 1번째 줄, 2번째 줄에 차례로 곱해진 것입니다.

즉 B가 2차원 배열로 확대되어 A와 곱해진 것입니다. 이를 numpy에서는 브로드캐스트라고 부릅니다.

 

14. matplotlib

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1) # 0부터 6까지 0.1 간격으로 생성 ex) 0, 0.1, 0.2, 0.3
y = np.sin(x) # sin 함수를 통해 sin 값을 구합니다. 단순히 x 값의 sin 을 구하는게 아니라 
              # 여러 연산 과정을 통해 구해집니다. 더 많은 것은 numpy 매뉴얼의 sin() 을 참고하세요.

plt.plot(x, y)
plt.show() # 하나의 창이 나타나고 그래프가 그려집니다.

matplotlib은 그래프를 그리고 데이터를 시각화하는데 사용됩니다.

위와 같이 빠르고 쉽게 sin 그래프를 그릴 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1) # 0부터 6까지 0.1 간격으로 생성 ex) 0, 0.1, 0.2, 0.3
y1 = np.sin(x) # sin 함수를 통해 sin 값을 구합니다. 단순히 x 값의 sin 을 구하는게 아니라 
               # 여러 연산 과정을 통해 구해집니다. 더 많은 것은 numpy 매뉴얼의 sin() 을 참고하세요.
y2 = np.cos(x) # cos 함수를 통해 cos 값을 구합니다. 단순히 x 값의 cos 을 구하는게 아니라 
               # 여러 연산 과정을 통해 구해집니다. 더 많은 것은 numpy 매뉴얼의 cos() 을 참고하세요.
plt.plot(x, y1, label="sin") # sin 이름을 가진 y1 데이터의 그래프를 그립니다.
plt.plot(x, y2, linestyle="--", label="cos") # cos 이름을 가진 y2 데이터의 그래프를 그립니다.
plt.xlabel("x") # x축의 이름을 x 라고 설정합니다.
plt.ylabel("y") # y축의 이름을 y 라고 설정합니다.
plt.title("sin & cos") # 제목을 sin & cos 으로 설정합니다.
plt.legend() # 여러개의 그래프를 그릴 때 두 그래프를 구분하기 위한 라벨을 띄웁니다.
plt.show() # 하나의 창이 나타나고 그래프가 그려집니다.

Comments