객체와 ndarray

김상윤·2023년 2월 9일
0

객체

Object란?
Object(객체)란 데이터와 메서드가 합쳐진 것을 말한다. Object는 Object끼리 method등을 이용해 data를 바꾸고 서로 영향을 주고 받는다. Data는 variable이라고 부른다. Python에서 모든 것은 객체(Object)이다.

a = [1,2,3] #List object를 instantiate 한 것이다
a.append(4) #object는 . 연산자를 이용해 접근한다.

Special Methods
example 1

a, b= 10, 20
c = a+b

print(a+b) #30
print(a.__add__(b)) #30

a, b, c 모두 int형 object이기에 method의 종류가 동일하며 python interpreter는 a+b를 int object에 정의되어 있는 special method "list._ _add__"로 바꿔주고 object method를 통해 연산이 이루어진다.

example 2

print(len(a))
print(a.__len__())

result = ((a.__add__(b)).__pow__(c).__sub__(d.__truediv__(e))

사용자 입장에서 프로그래밍하기 편하게 해주기 위해 만든 method이다. 또한 special method를 사용하여 가독성이 떨어지는 것을 방지해준다.

ndarray

import numpy as np

score = [10,20,30,40,50]

print("mean: ", numpy.mean(score)) #mean : 30.0
print('variance: ", numpy.var(score)) #variance : 200

numpy가 제공하는 함수를 사용하기 위해 import numpy를 해준다.

a = np.array([1,2,3])
print(type(a)) <class 'numpy.ndarray'>

u = (1 2 3) 
v = (4 5 6)
w = u + v
print(w) #(5 7 9)


u = [1 2 3] 
v = [4 5 6]
w = [0] * len(u)
for data_idx in range(len(u)):
	w[data_idx] = u[data_idx] + v[data_idx]
print(w) #[5 7 9]

위는 numpy와 파이썬 기본 함수를 사용하여 element-wise addition을 수행한 것을 비교하는 코드이다. numpy 없이 리스트로 같은 연산을 하기 위해서는 위와 같이 코드가 길어지고 가독성도 떨어진다. numpy를 사용하지 않는다면 복잡한 task를 수행하는 머신러닝 코드를 작성할 때 코드가 길어지고 이해하기 어려워지는 문제가 생긴다.
ex)2D Matrix M + N은 for문 2개를 통해 구현되어야 한다.

Tensor

Tensor는 numpy에서 사용하는 자료형이라고 생각할 수 있을것 같다.
하나의 값을 가진 변수를 우리는 numpy의 시선에서는 0th order tensor라고 생각할 수 있다. 마찬가지로 1d array는 1st order tensor로 생각할 수 있는 것이다.
notation
() -> (m,) -> (m,n,) -> ...
새로운 시선
(m,) 은 0th order tensor ()가 m개의 ndarray로 생각할 수 있다.
(n,m)에서 n은 외부차원 m은 내부 차원이라고 부르고 ndarray 함수는 외부차원부터 계산한다.

(n,m)은 n개의 ndarray를 가지고 있고 각각의 ndarray는 뜯어보니 (m,)의 ndarray였다.

a = np.array(n,m)
a[0] #n개중 0번째 ndarray를 가져와라 = 0번째 row, 0번째 행을 가져와라
a[1] #n개중 1번째 ndarray를 가져와라 = 1번째 row, 1번째 행을 가져와라

100장의 이미지를 tensor로 저장한다고 생각해보자
image.shape() -> (100,500,600,3)
image[0] -> 첫번째 이미지
image[1] -> 두번째 이미지

profile
AI 대학원 지망생

0개의 댓글