19.1 변수 이름 지정
변수에 이름을 붙여줄 수 있도록 설정합니다.
class Variable:
def __init__(self, data, name=None): #2.초기화 인수 추가
if data is not None:
if not isinstance(data, np.ndarray):
raise TypeError('{} is not supported'.format(type(data)))
self.data = data
self.name = name # 1.Variable 클래스에 name 이라는 인스턴스 변수 추가
self.grad = None
self.creator = None
self.generation = 0
x = Variable(np.array(1.0), 'input_x') # 3. 실제사용: 변수 x의 이름은 input_x가 됨
*변수에 이름을 붙일 수 있으면, 계산 그래프를 시각화 할 때 변수 이름을 그래프에 표시할 수 있습니다.
19.2 ndarray 인스턴스 변수
사용자 입장에서 Variable 속 데이터가 중요한데 Variable이 데이터인 것 처럼 보이게 하는 장치가 필요합니다.
다차원 배열용 인스턴스 변수인 shape는 다차원 배열의 형상을 알려줍니다.
class Variable:
@property
def shape(self):
return self.data.shape
# 실제 호출
x = Variable(np.array([[1, 2, 3], [4, 5, 6]]))
print('x의 shape:', x.shape)

해당 방법 처럼 메서드 호출이 아닌 인스턴스 변수로 데이터의 형상을 얻을 수 있습니다.
ndarray의 다른 인스턴스 변수인 ndim, size, dtype을 Variable에 추가하겠습니다.
class Variable:
@property
def ndim(self): # 차원
return self.data.ndim
@property
def size(self): # 원소 수
return self.data.size
@property
def dtype(self): # 데이터 타입
return self.data.dtype
19.3 len 함수와 print 함수
class Variable:
def __len__(self):
return len(self.data)
# 실제 사용
x = Variable(np.array([[1, 2, 3], [4, 5, 6]]))
print('x의 shape:', x.shape)
__len__이라는 특수 메서드를 구현하여 Variable 인스턴스에 len함수를 사용할 수 있게 됩니다.

class Variable:
def __repr__(self):
if self.data is None:
return 'variable(None)'
p = str(self.data).replace('\n', '\n' + ' ' * 9)
return 'variable(' + p + ')'
print 함수를 사용해 출력 문자열을 만들어주는 코드입니다.
위의 코드에서는 str(self.data)를 이용하여 ndarray 인스턴스를 문자열로 변환했습니다.
str 함수 안에는 ndarray 인스턴스의 __str__함수가 호출되고 숫자가 문자열로 변환됩니다.
줄바굼이 있으면 줄을 바꾸고 새로운 줄 앞에 공백 9개를 삽입하여 여러 줄에 걸친 출력도 숫자의 시작 위치가 가지런해지도록 효시되게 했습니다.
마지막으로 변환된 문자열을 'variable(..)'형태로 감쌉니다.
# 실행 코드
x = Variable(np.array([[1, 2, 3], [4, 5, 6]]))
print('x의 shape:', x.shape)
print('x의 ndim:', x.ndim)
print('x의 size:', x.size)
print('x의 dtype:', x.dtype)
print('x의 len:', len(x))
print(x)

'Study 공부할레나' 카테고리의 다른 글
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_21. 연산자 오버로드(2) (0) | 2023.08.27 |
|---|---|
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_20. 연산자 오버로드(1) (0) | 2023.08.27 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_18. 메모리 절약 모드 (0) | 2023.08.26 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_17. 메모리 관리와 순환 참조 (0) | 2023.08.26 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_16. 복잡한 계산 그래프(구현편) (0) | 2023.08.26 |