본문 바로가기

AutoCAD

[Deep Learning] 220724 학습일기

 

밑바닥부터 시작하는 딥러닝 - YES24

직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서 이 책은 라이브러리나 프레임워크에 의존하지 않고, 딥러닝의 핵심을 ‘밑바닥부터’ 직접 만들어보며 즐겁게 배울 수 있는 본격 딥

www.yes24.com

 

1.

파이썬은 동적언어다.

동적의 의미는 변수의 자료형을 상황에 맞게 자동으로 결정한다는 뜻이다.

>>> a=1
>>> type(a)
<class 'int'>

a=1이라 정의했을 때 a의 자료형을 따로 정해준 적이 없음에도 x의 형태가 int(정수)임을 파이썬 스스로가 판단한다.

 

 

2.

들여쓰기는 space 4번

VSC에서는 Tab을 써도 무관하지만 파이썬 인터프리터에서는 space 4번을 쓰는 게 나을 듯 하다.

 

 

3.
파이썬 인터프리터를 종료하려면  ctrl+Z 를 입력하고 엔터

 

 

4.

그냥 Visual Studio Code를 사용하려 한다.

cmd에서 하나하나 실행하려니 너무 불편하다.

 

 

5.

클래스 만들고 인스턴스 만드는 것은 이제 어렵지 않다.

 

이걸 물론 인터프리터에서도 실행할 수 있다.

man.py(파일)가 있는 directory로 이동 후

python man.py

 해주면 된다.

 

일반화 하면

python 파일이름

 

 

6. 

여기서 다시 복습해보는 인스턴스와 객체

 

class Cookie:
	pass

a = Cookie()

인스턴스는 클래스로 만든 객체이다.
'인스턴스' 라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다.


*어울리는 표현*

  • a는 객체.
  • (객체) a는 Cookie의 인스턴스.

 

 

7.

numpy 를 np로 가져오자.

import numpy as np

 

 

8.

넘파이 배열을 만들어보자.

np.array() 를 이용한다.

 

np.array()는 파이썬의 리스트를 인수로 받아 numpy 라이브러리가 제공하는 특수한 형태의 배열(numpy.ndarray)을 반환한다.

import numpy as np
x = np.array([1.0,2.0,3.0])
print(x)

# 출력값
[1. 2. 3.]

 

import numpy as np
x = np.array([1.0,2.0,3.0])
print(type(x))

#출력값
<class 'numpy.ndarray'>

 

 

9.

numpy 배열로 산술 연산을 해보자.

import numpy as np
x = np.array([1.0,2.0,3.0])
y = np.array([2.0,4.0,6.0])

print(x+y) #원소별 덧셈
print(x-y) #원소별 뺄셈
print(x*y) #원소별 곱셈
print(x/y) #원소별 나눗셈

출력값은 아래와 같다.

[3. 6. 9.]
[-1. -2. -3.]
[ 2.  8. 18.]
[0.5 0.5 0.5]

 

이때 배열 x와 배열 y의 원소 수가 같아야 한다.

다르면 오류가 난다.

 

왜냐? 원소별로 덧셈, 뺄셈, 곱셈, 나눗셈이 이루어지기 때문이다,

 

x의 0번째 원소인 1.과 y의 0번째 원소인 2.의 산술 연산이 이루어지고

x의 1번째 원소인 2.과 y의 1번째 원소인 4.의 산술 연산이 이루어지고

x의 2번째 원소인 3.과 y의 2번째 원소인 6.의 산술 연산이 이루어진다,

 

이걸 원소별 계산 이라고 한다.

 

'원소별' 이라는 말은 영어로 element-wise라고 한다.

예를 들어 '원소별 곱셈'은 element-wise product이다.

 

 

**원소 수를 맞추지 않으면 이렇게 된다.

import numpy as np
x = np.array([1.0,2.0,3.0])
y = np.array([2.0,4.0,6.0,8.0])

print(x+y)
print(x-y)
print(x*y)
print(x/y)

출력되는 내용은 아래와 같다.

Traceback (most recent call last):
  File "c:\Users\tina0\Desktop\python 실습들\Deep Learning-밑시딥\1.5 .py", line 5, in <module>
    print(x+y)
ValueError: operands could not be broadcast together with shapes (3,) (4,)

 

 

10.

numpy는 1차원 배열(1줄로 늘어선 배열)뿐 아니라 다차원 배열도 작성할 수 있다.

 

2차원 배열은 아래와 같이 만든다.

import numpy as np
A = np.array([[1,2],[3,4]])
print(A)
print(A.shape)
print(A.dtype)

<출력값>

[[1 2]
 [3 4]]
(2, 2)
int32

행렬에서 각 행을 원소로 하는 리스트를 인수로 넣어주면 된다.

A.shape는 A의 크기를 의미한다. 2x2 행렬이므로 (2,2)를 반환한다.

A.dtype는 행렬 A에 담긴 원소의 자료형을 의미한다.

 

*dtype이 이해가 잘 가지 않아 찾아보니

A data type object (an instance of numpy.dtype class) describes how the bytes in the fixed-size block of memory corresponding to an array item should be interpreted.

행렬에 담긴 원소들 1,2,3,4가 32bit 정수라는 의미이다.

int32는 부호 있는 32비트 정수형을 의미한다.

 

 

11.

np.array의 인수로 리스트를 넣으면 콤마가 사라지는 이유를 생각하보니 행렬은 콤마를 쓰지 않는다.

그래서 콤마가 사라지는 거 아닐까?

 

 

[참고]

-dtype

https://numpy.org/doc/stable/reference/arrays.dtypes.html

 

Data type objects (dtype) — NumPy v1.23 Manual

The generic hierarchical type objects convert to corresponding type objects according to the associations: Deprecated since version 1.19: This conversion of generic scalar types is deprecated. This is because it can be unexpected in a context such as arr.a

numpy.org

 

'AutoCAD' 카테고리의 다른 글

[AutoCAD] 220518 학습 일기  (0) 2022.05.20
[AutoCAD] 220516 학습일기  (0) 2022.05.18
[AutoCAD] 220514 학습일기  (0) 2022.05.15
[AutoCAD] 220513 학습일기  (0) 2022.05.14
[AutoCAD] 220512 학습일기  (0) 2022.05.13