AI TECH

torch.tensor와 torch.Tensor의 차이

prefer_all 2022. 9. 26. 17:27
둘 다 data에 대해 tensor 객체로 만들어주는 기능은 동일하다.
 
torch.tensor torch.Tensor
python function python class
항상 data를 복사하기 때문에 data가 필수 argument임
이미 존재하는 데이터를 tensor로 바꾸고 싶을 때, 빈 tensor 객체를 만들 때 사용할 수 있음
 입력받은 데이터를 새로은 메모리 공간에 복사해 tensor 객체를 생성(call by value) [1] tensor 객체로 데이터 입력시 입력 받은 메모리 공간을 그대로 사용하고(call by reference)
[
2list나 numpy로 데이터 입력시 입력 받은 값을 복사해 Tensor 객체로 생성한다(call by value)
int 입력 시 그래도 int int 입력시 float로 바뀜

 

torch.tensor

import torch
import numpy as np

# torch.Tensor은 list나 numpy를 받으면 값을 복사해온다

original_data = [1]
new_data = torch.Tensor(original_data)
print(f"original : {original_data} \nnew : {new_data}")

# original data를 수정하자
original_data[0] = 2
print(f"original : {original_data} \nnew : {new_data}")
'''
original : [1] 
new : tensor([1.])
original : [2] 
new : tensor([1.]) #new는 안바뀜
'''
  • int로 받아 int로 생성된 것을 볼 수 있다.
  • original data를 바꿔도 new Tensor의 값은 바뀌지 않는다.

 

 

torch.Tensor

import torch
import numpy as np

# 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} \nnew : {new_data}")

'''
original : tensor([1.]) #int가 float로 바뀜
ew : tensor([1.])
original : tensor([2.])  
new : tensor([2.]) # new도 바뀜
'''
  • int가 float형으로 바뀐 것을 볼 수 있다
  • input이 Tensor객체인 경우 original Tensor 값을 변경하니 new Tensor 값도 덩달아 바뀐 것을 볼 수 있다