PyTorch 텐서의 차원 변경
view() 메서드:
view()
메서드는 텐서의 크기를 변경하는 데 사용됩니다. 새로운 크기는 텐서의 총 요소 수와 같아야 합니다. 예를 들어, 다음 코드는 (2, 3) 텐서를 (3, 2) 텐서로 변환합니다.
import torch
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서를 (3, 2) 텐서로 변환
y = x.view(3, 2)
print(y)
# 출력:
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
permute() 메서드:
permute()
메서드는 텐서의 차원 순서를 변경하는 데 사용됩니다. 예를 들어, 다음 코드는 (2, 3, 4) 텐서의 차원 순서를 (4, 3, 2)로 변경합니다.
x = torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# (2, 3, 4) 텐서의 차원 순서를 (4, 3, 2)로 변경
y = x.permute(2, 1, 0)
print(y)
# 출력:
# tensor([[[1, 7],
# [2, 8],
# [3, 9]],
# [[4, 10],
# [5, 11],
# [6, 12]]])
unsqueeze() 및 squeeze() 메서드:
unsqueeze()
메서드는 텐서에 새로운 차원을 추가하는 데 사용됩니다. squeeze()
메서드는 텐서에서 차원을 제거하는 데 사용됩니다. 예를 들어, 다음 코드는 (2, 3) 텐서에 새로운 차원을 추가하여 (2, 3, 1) 텐서를 만들고, 다시 1차원 텐서로 변환합니다.
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서에 새로운 차원 추가
y = x.unsqueeze(2)
print(y)
# 출력:
# tensor([[[1, 2, 3]],
# [[4, 5, 6]]])
# (2, 3, 1) 텐서에서 차원 제거
z = y.squeeze()
print(z)
# 출력:
# tensor([1, 2, 3, 4, 5, 6])
.reshape() 메서드:
.reshape()
메서드는 NumPy에서 텐서의 크기를 변경하는 데 사용되는 함수와 유사합니다. 예를 들어, 다음 코드는 (2, 3) 텐서를 (3, 2) 텐서로 변환합니다.
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서를 (3, 2) 텐서로 변환
y = x.reshape(3, 2)
print(y)
# 출력:
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
.expand() 및 .repeat() 메서드:
.expand()
및 .repeat()
메서드는 텐서를 복제하여 새로운 크기의 텐서를 만드는 데 사용됩니다. .expand()
메서드는 텐서의 크기를 변경하지 않고 새 텐서에 원본 텐서의 값을 복제합니다. .repeat()
메서드는 텐서의 크기를 변경하고 새 텐서에 원본 텐서의 값을 반복합니다.
참고:
- 텐서의 차원을 변경하면 텐서의 데이터가
예제 코드
import torch
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서를 (3, 2) 텐서로 변환
y = x.view(3, 2)
print(y)
# 출력:
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
x = torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# (2, 3, 4) 텐서의 차원 순서를 (4, 3, 2)로 변경
y = x.permute(2, 1, 0)
print(y)
# 출력:
# tensor([[[1, 7],
# [2, 8],
# [3, 9]],
# [[4, 10],
# [5, 11],
# [6, 12]]])
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서에 새로운 차원 추가
y = x.unsqueeze(2)
print(y)
# 출력:
# tensor([[[1, 2, 3]],
# [[4, 5, 6]]])
# (2, 3, 1) 텐서에서 차원 제거
z = y.squeeze()
print(z)
# 출력:
# tensor([1, 2, 3, 4, 5, 6])
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서를 (3, 2) 텐서로 변환
y = x.reshape(3, 2)
print(y)
# 출력:
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# (2, 3) 텐서를 (4, 6) 텐서로 확장
y = x.expand(4, 6)
print(y)
# 출력:
# tensor([[1, 2, 3, 1, 2, 3],
# [4, 5, 6, 4, 5, 6],
# [1, 2, 3, 1, 2, 3],
# [4, 5, 6, 4, 5, 6]])
# (2, 3) 텐서를 (4, 6) 텐서로 반복
z = x.repeat(2, 2)
print(z)
# 출력:
# tensor([[1, 2, 3, 1, 2, 3],
# [4, 5, 6, 4, 5, 6],
# [1, 2, 3, 1, 2, 3],
# [4, 5, 6, 4, 5, 6]])
- 텐서의 차원을 변경하면 텐서의 데이터가 변경되지 않습니다.
- 텐서의 크기를 변경하려면
view()
또는reshape()
메서드를 사용해야 합니다. - 텐서의 차원 순서를 변경하려면
permute()
메서드를 사용해야 합니다. - 텐서에 새로운 차원을 추가하려면
unsqueeze()
메서드를 사용해야 합니다. - 텐서에서 차원을 제거하려면
squeeze()
메서
PyTorch에서 텐서의 차원을 변경하는 대체 방법
인덱싱 및 슬라이싱:
텐서의 특정 차원을 선택하거나 제거하려면 인덱싱 및 슬라이싱을 사용할 수 있습니다. 예를 들어, 다음 코드는 (2, 3, 4) 텐서에서 첫 번째 차원을 제거하여 (3, 4) 텐서를 만듭니다.
x = torch.tensor([[[1, 2, 3, 4], [5, 6, 7, 8]], [[9, 10, 11, 12], [13, 14, 15, 16]]])
# 첫 번째 차원 제거
y = x[0]
print(y)
# 출력:
# tensor([[1, 2, 3, 4],
# [5, 6, 7, 8]])
.cat() 및 .stack() 메서드:
.cat()
메서드는 여러 텐서를 하나의 텐서로 결합하는 데 사용됩니다. .stack()
메서드는 여러 텐서를 새로운 차원으로 결합하는 데 사용됩니다. 예를 들어, 다음 코드는 두 개의 (2, 3) 텐서를 하나의 (4, 3) 텐서로 결합합니다.
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
y = torch.tensor([[7, 8, 9], [10, 11, 12]])
# 두 개의 텐서 결합
z = torch.cat((x, y), 0)
print(z)
# 출력:
# tensor([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9],
# [10, 11, 12]])
.split() 및 .chunk() 메서드:
.split()
메서드는 텐서를 여러 개의 작은 텐서로 분할하는 데 사용됩니다. .chunk()
메서드는 텐서를 새로운 차원을 기준으로 여러 개의 텐서로 분할하는 데 사용됩니다. 예를 들어, 다음 코드는 (4, 3) 텐서를 두 개의 (2, 3) 텐서로 분할합니다.
x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
# 텐서를 두 개의 텐서로 분할
y, z = torch.split(x, 2, 0)
print(y)
# 출력:
# tensor([[1, 2, 3],
# [4, 5, 6]])
print(z)
# 출력:
# tensor([[7, 8, 9],
# [10, 11, 12]])
NumPy 배열 사용:
PyTorch 텐서는 NumPy 배열로 변환될 수 있으며, NumPy 배열에는 텐서의 차원을 변경하는 다양한 함수가 있습니다. 예를 들어, 다음 코드는 NumPy 함수를 사용하여 (2, 3) 텐서를 (3, 2) 텐서로 변환합니다.
import numpy as np
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# NumPy 배열로 변환
y = x.numpy()
# 텐서 변환
y = np.reshape(y, (3, 2))
# NumPy 배열을 PyTorch 텐서로 변환
z = torch.from_numpy(y)
print(z)
# 출력:
# tensor([[1, 2],
# [3, 4],
# [5, 6]])
- 인덱싱 및 슬라이싱은 텐서의 특정 차원을 선택하거나 제거하는 데 유용합니다.
.cat()
및.stack()
메서드는 여러 텐서를 하나의
pytorch