파이토치 텐서를 파이썬 리스트로 변환하는 방법
파이토치 텐서를 파이썬 리스트로 변환하는 방법
torch.tolist() 사용하기
torch.tolist()
메서드는 텐서를 파이썬 리스트로 변환하는 가장 간단한 방법입니다. 이 메서드는 텐서의 모든 값을 리스트에 복사합니다.
import torch
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 리스트로 변환
list_tensor = tensor.tolist()
# 출력
print(list_tensor)
출력:
[1, 2, 3, 4, 5]
for 루프 사용하기
for
루프를 사용하여 텐서의 모든 값을 리스트에 하나씩 추가할 수 있습니다.
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 리스트 생성
list_tensor = []
# 텐서의 모든 값을 리스트에 추가
for i in range(tensor.size(0)):
list_tensor.append(tensor[i].item())
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
numpy.array 사용하기
numpy.array
함수를 사용하여 텐서를 NumPy 배열로 변환한 후, tolist()
메서드를 사용하여 리스트로 변환할 수 있습니다.
import numpy as np
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 NumPy 배열로 변환
numpy_array = tensor.numpy()
# NumPy 배열을 리스트로 변환
list_tensor = numpy_array.tolist()
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
.cpu() 및 .detach() 사용하기
GPU에서 텐서를 사용하는 경우, 먼저 .cpu()
메서드를 사용하여 CPU로 옮겨야 합니다. 또한, .detach()
메서드를 사용하여 텐서의 연산 기록을 분리해야 합니다.
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5], device="cuda")
# 텐서를 CPU로 옮기기
tensor = tensor.cpu()
# 텐서의 연산 기록 분리
tensor = tensor.detach()
# 텐서를 리스트로 변환
list_tensor = tensor.tolist()
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
참고:
- 텐서를 리스트로 변환하면 텐서의 연산 기록이 손실됩니다.
- 텐서를 리스트로 변환하기 전에 텐서의 requires_grad 속성이 False인지 확인해야 합니다.
추가 정보
예제 코드
import torch
# 1. torch.tolist() 사용하기
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 리스트로 변환
list_tensor = tensor.tolist()
# 출력
print(list_tensor)
# 2. for 루프 사용하기
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 리스트 생성
list_tensor = []
# 텐서의 모든 값을 리스트에 추가
for i in range(tensor.size(0)):
list_tensor.append(tensor[i].item())
# 출력
print(list_tensor)
# 3. numpy.array 사용하기
import numpy as np
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 NumPy 배열로 변환
numpy_array = tensor.numpy()
# NumPy 배열을 리스트로 변환
list_tensor = numpy_array.tolist()
# 출력
print(list_tensor)
# 4. .cpu() 및 .detach() 사용하기
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5], device="cuda")
# 텐서를 CPU로 옮기기
tensor = tensor.cpu()
# 텐서의 연산 기록 분리
tensor = tensor.detach()
# 텐서를 리스트로 변환
list_tensor = tensor.tolist()
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
파이토치 텐서를 파이썬 리스트로 변환하는 대체 방법
map() 함수 사용하기
map()
함수를 사용하여 텐서의 모든 값을 리스트에 변환할 수 있습니다.
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 리스트로 변환
list_tensor = list(map(lambda x: x.item(), tensor))
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
itertools.chain() 사용하기
itertools.chain()
함수를 사용하여 텐서의 모든 값을 하나의 리스트로 연결할 수 있습니다.
from itertools import chain
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 리스트로 변환
list_tensor = list(chain(*tensor))
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
.view(-1) 사용하기
텐서의 차원을 1로 변경한 후, .tolist()
메서드를 사용하여 리스트로 변환할 수 있습니다.
# 텐서 생성
tensor = torch.tensor([[1, 2], [3, 4]])
# 텐서의 차원을 1로 변경
tensor = tensor.view(-1)
# 텐서를 리스트로 변환
list_tensor = tensor.tolist()
# 출력
print(list_tensor)
[1, 2, 3, 4]
.squeeze() 사용하기
텐서의 모든 차원의 크기가 1인 경우, .squeeze()
메서드를 사용하여 리스트로 변환할 수 있습니다.
# 텐서 생성
tensor = torch.tensor([1, 2, 3, 4, 5])
# 텐서를 리스트로 변환
list_tensor = tensor.squeeze().tolist()
# 출력
print(list_tensor)
[1, 2, 3, 4, 5]
선택 가이드
파이토치 텐서를 파이썬 리스트로 변환하는 방법은 여러 가지가 있습니다. 자신에게 가장 적합한 방법을 선택하는 데 다음과 같은 사항을 고려하십시오.
- 텐서의 크기: 텐서의 크기가 작으면
tolist()
메서드를 사용하는 것이 가장 간단합니다. 텐서의 크기가 크면map()
함수나itertools.chain()
함수를 사용하는 것이 더 효율적일 수 있습니다. - 텐서의 차원: 텐서의 차원이 1인 경우
.squeeze()
메서드를 사용하는 것이 가장 간단합니다. 텐서의 차원이 2 이상인 경우.view(-1)
메서드를 사용하여 차원을 1로 변경한 후tolist()
메서드를 사용할 수 있습니다. - 코드의 가독성: 코드의 가독성을 위해 가장 간단하고 명확한 방법을 선택하는 것이 좋습니다.
참고
python pytorch