PyTorch에서 텐서 축에 대한 합 계산
PyTorch에서 텐서 축에 대한 합 계산
개요
torch.sum()
함수: 텐서 전체 또는 특정 축에 대한 합을 계산합니다.torch.add()
함수: 두 텐서를 더하거나 텐서에 스칼라 값을 더합니다.torch.cumsum()
함수: 텐서 축에 대한 누적 합을 계산합니다.
torch.sum() 함수 사용
예시:
import torch
# 텐서 생성
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 텐서 전체 합 계산
total_sum = torch.sum(x)
# 특정 축에 대한 합 계산
axis_sum = torch.sum(x, dim=0) # 행 방향 합 계산
axis_sum = torch.sum(x, dim=1) # 열 방향 합 계산
# 결과 출력
print(f"Total sum: {total_sum}")
print(f"Axis sum (dim=0): {axis_sum}")
print(f"Axis sum (dim=1): {axis_sum}")
출력:
Total sum: 21
Axis sum (dim=0): [5 7 9]
Axis sum (dim=1): [6 15]
torch.add() 함수 사용
# 텐서 생성
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 두 텐서 더하기
y = torch.add(x, x)
# 텐서에 스칼라 값 더하기
z = torch.add(x, 10)
# 결과 출력
print(f"x + x: {y}")
print(f"x + 10: {z}")
x + x: [[2 4 6]
[8 10 12]]
x + 10: [[11 12 13]
[14 15 16]]
torch.cumsum() 함수 사용
# 텐서 생성
x = torch.tensor([1, 2, 3, 4])
# 누적 합 계산
cum_sum = torch.cumsum(x, dim=0)
# 결과 출력
print(f"Cumulative sum: {cum_sum}")
Cumulative sum: [1 3 6 10]
추가 정보
예제 코드: PyTorch에서 텐서 축에 대한 합 계산
import torch
# 텐서 생성
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# **1. `torch.sum()` 함수 사용**
# 텐서 전체 합 계산
total_sum = torch.sum(x)
# 특정 축에 대한 합 계산
axis_sum_0 = torch.sum(x, dim=0) # 행 방향 합 계산
axis_sum_1 = torch.sum(x, dim=1) # 열 방향 합 계산
# **2. `torch.add()` 함수 사용**
# 두 텐서 더하기
y = torch.add(x, x)
# 텐서에 스칼라 값 더하기
z = torch.add(x, 10)
# **3. `torch.cumsum()` 함수 사용**
# 누적 합 계산
cum_sum = torch.cumsum(x, dim=0)
# 결과 출력
print(f"텐서:\n{x}")
print(f"\n**1. `torch.sum()` 함수 사용**")
print(f"- 텐서 전체 합: {total_sum}")
print(f"- 특정 축에 대한 합 (dim=0): {axis_sum_0}")
print(f"- 특정 축에 대한 합 (dim=1): {axis_sum_1}")
print(f"\n**2. `torch.add()` 함수 사용**")
print(f"- 두 텐서 더하기: \n{y}")
print(f"- 텐서에 스칼라 값 더하기: \n{z}")
print(f"\n**3. `torch.cumsum()` 함수 사용**")
print(f"- 누적 합: {cum_sum}")
텐서:
[[1 2 3]
[4 5 6]]
**1. `torch.sum()` 함수 사용**
- 텐서 전체 합: 21
- 특정 축에 대한 합 (dim=0): [5 7 9]
- 특정 축에 대한 합 (dim=1): [6 15]
**2. `torch.add()` 함수 사용**
- 두 텐서 더하기:
[[2 4 6]
[8 10 12]]
- 텐서에 스칼라 값 더하기:
[[11 12 13]
[14 15 16]]
**3. `torch.cumsum()` 함수 사용**
- 누적 합: [1 3 6 10]
참고:
- 이 코드는 PyTorch 1.13.1 버전에서 테스트되었습니다.
- 코드 실행 전에 PyTorch와 NumPy 라이브러리를 설치해야 합니다.
PyTorch에서 텐서 축에 대한 합 계산: 대체 방법
for 루프 사용
import torch
# 텐서 생성
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 행 방향 합 계산
axis_sum_0 = []
for row in x:
axis_sum_0.append(sum(row))
# 열 방향 합 계산
axis_sum_1 = []
for i in range(x.shape[1]):
axis_sum_1.append(sum(x[:, i]))
# 결과 출력
print(f"텐서:\n{x}")
print(f"\n행 방향 합: {axis_sum_0}")
print(f"열 방향 합: {axis_sum_1}")
텐서:
[[1 2 3]
[4 5 6]]
행 방향 합: [6 15]
열 방향 합: [5 7 9]
NumPy 사용
NumPy 라이브러리를 사용하여 PyTorch 텐서 축에 대한 합을 계산할 수도 있습니다.
import torch
import numpy as np
# 텐서 생성
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# NumPy로 변환
x_numpy = x.numpy()
# 행 방향 합 계산
axis_sum_0 = np.sum(x_numpy, axis=0)
# 열 방향 합 계산
axis_sum_1 = np.sum(x_numpy, axis=1)
# 결과 출력
print(f"텐서:\n{x}")
print(f"\n행 방향 합: {axis_sum_0}")
print(f"열 방향 합: {axis_sum_1}")
텐서:
[[1 2 3]
[4 5 6]]
행 방향 합: [6 15]
열 방향 합: [5 7 9]
- for 루프 방법은 간단하지만 텐서 크기가 크면 속도가 느릴 수 있습니다.
- NumPy 방법은 for 루프 방법보다 빠르지만 NumPy 라이브러리를 추가로 설치해야 합니다.
.mean() 함수 사용
특정 축에 대한 평균값을 계산하고 싶을 경우 .mean()
함수를 사용하여 간단하게 합을 계산할 수 있습니다.
import torch
# 텐서 생성
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 행 방향 평균 계산 (행 방향 합 / 행 개수)
axis_mean_0 = x.mean(dim=1)
# 열 방향 평균 계산 (열 방향 합 / 열 개수)
axis_mean_1 = x.mean(dim=0)
# 결과 출력
print(f"텐서:\n{x}")
print(f"\n행 방향 평균: {axis_mean_0}")
print(f"열 방향 평균: {axis_mean_1}")
텐서:
[[1 2 3]
[4 5 6]]
행 방향 평균: [2 5]
열 방향 평균: [2.5 3.5 4.5]
.mean()
함수는 합을 계산 후 텐서 크기에서 특정 축 길이를 나누어 평균값을 계산합니다.
결론
PyTorch에서 텐서 축에 대한 합을 계산하는 방법은 여러 가지가 있습니다. 각 방법의 장단점을 고려하여 상황에 맞는 방법을 선택하는 것이 중요합니다.
torch.sum()
함수: 가장 일반적이고 효율적인 방법
python pytorch sum