torch.Tensor와 torch.tensor의 차이.
- torch.Tensor
- Type : Class
- int 입력시 float으로 변환
- 데이터 입력(tensor 객체로)시 입력 받은 데이터의 메모리 공간을 사용 ( 얕은 복사 )
- 데이터 입력(list, numpy 객체로)시 입력 받은 데이터를 복사하여 새롭게 torch.Tensor를 만든 후 사용 (깊은 복사)
- torch.tensor
- Type : Function
- int 입력시 int 그대로
- 입력 받은 데이터를 새로운 메모리 공간으로 복사 후 사용 ( 깊은 복사 )
torch.Tensor
# torch.Tensor은 Tensor 객체를 받으면 메모리 주소값을 복사해 온다.
original_data = torch.Tensor([1])
new_data = torch.Tensor(original_data)
print(f"original : {original_data} new : {new_data}")
# original data를 수정
original_data[0] = 2
print(f"original : {original_data} new : {new_data}")
>>> original : tensor([1.]) new : tensor([1.])
original : tensor([2.]) new : tensor([2.])
int
가 float
형으로 바뀐 것을 볼 수 있다
- input이
Tensor객체
인 경우 original Tensor 값을 변경하니 new Tensor 값도 덩달아 바뀐 것을 볼 수 있다
- 이해가 잘 안간다면
call by reference
나 얕은복사(shallow copy)
개념을 보면 될 것이다.
# torch.Tensor은 list나 numpy를 받으면 값을 복사해온다
original_data = [1]
new_data = torch.Tensor(original_data)
print(f"original : {original_data} new : {new_data}")
# original data를 수정하자
original_data[0] = 2
print(f"original : {original_data} new : {new_data}")
>>>> original : [1] new : tensor([1.])
original : [2] new : tensor([1.])
- input이
list
나 numpy
인 경우, original list 값을 변경해도, new Tensor의 값은 바뀌지 않은 것을 볼수 있다.
- 이해가 잘 안간다면
call by value
나 깊은복사(deep copy)
개념을 보면 될 것이다.
torch.tensor
# torch.torch의 경우 값을 복사해 Tensor 생성
original_data = torch.tensor([1])
new_data = torch.tensor(original_data)
print(f"original : {original_data} new : {new_data}")
# data를 수정하자
original_data[0] = 2
print(f"original : {original_data} new : {new_data}")
>>> original : tensor([1]) new : tensor([1])
original : tensor([2]) new : tensor([1])
int
로 받아 int
로 생성된 것을 볼 수 있다.
- original data를 바꿔도 new Tensor의 값은 바뀌지 않는다.
torch.Tensor와 torch.tensor의 차이