【PyTorch】Tensorの統計量、平均、分散、標準偏差について



1. 統計量の計算
テンソル操作を行う際には、合計、平均、分散など、さまざまな統計量を計算することがよくあります。ここでは、PyTorchの便利なメソッドを使ってこれらの統計量を計算する方法を紹介します。
2. 合計
テンソルの全要素の合計を計算するには、sum()
メソッドを使います。以下の例で見てみましょう。
import torch
tensor = torch.tensor([[1, 3],[3, 7]])
# 合計
sum_value = tensor.sum()
print(sum_value)
上記のコードでは、テンソル tensor の全要素を合計しています。sum() メソッドを使うだけで、合計を簡単に求められます。
3. 平均
PyTorchではtorch.mean()
関数を使ってテンソルの平均を計算できます。
3.1. 使用例
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
# 平均を計算
mean_value = torch.mean(data)
print(mean_value) # 出力: tensor(3.)
ここではdata
の全要素の平均が計算されます。
3.2. 次元ごとの平均
多次元のテンソルで特定の次元ごとの平均を計算する場合は、dim
引数を使います。
# 2次元テンソル
data_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0],[5,6]])
# 列ごとの平均を計算 (dim=0)
mean_value_dim0 = torch.mean(data_2d, dim=0)
print(mean_value_dim1)
# 行ごとの平均を計算 (dim=1)
mean_value_dim1 = torch.mean(data_2d, dim=1)
print(mean_value_dim1)
この場合、各列と各行ごとの平均を計算しています。
4. 分散
分散はデータの広がりを示す統計量です。torch.var()
関数を使うことで、テンソルの分散を計算できます。


4.1. 使用例
# 分散を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
variance_value = torch.var(data)
print(variance_value)
データ全体の分散が計算され、これはデータが平均からどの程度離れているかを示します。
4.2. unbiased
PyTorchのtorch.var()
はデフォルトで不偏分散(自由度 = N-1)を計算しますが、unbiased
引数をFalse
に設定すると母分散(自由度 = N)を計算できます。
# 分散を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
variance_value = torch.var(data,unbiased=False)
print(variance_value)
4.3. 次元ごとの分散
特定の次元ごとの分散を計算する場合も、dim
引数を使います。
data_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0],[5,6]])
# 列ごとの分散を計算 (dim=0)
variance_value_dim0 = torch.var(data_2d, dim=0)
print(variance_value_dim0)
# 行ごとの分散を計算 (dim=1)
variance_value_dim1 = torch.var(data_2d, dim=1)
print(variance_value_dim1)
この場合、各列と各行ごとの平均を計算しています。
5. 標準偏差
標準偏差は分散の平方根であり、データの広がりを直感的に理解するのに役立ちます。
5.1. 使用例
# 標準偏差を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
std_value = torch.std(data)
print(std_value)
分散の平方根としての標準偏差が計算されます。
5.2. unbiased
PyTorchのtorch.std()
はデフォルトで不偏分散(自由度 = N-1)を計算しますが、unbiased
引数をFalse
に設定すると母分散(自由度 = N)を計算できます。
# 分散を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
variance_value = torch.std(data,unbiased=False)
print(variance_value)
5.3. 次元ごとの標準偏差
次元ごとの標準偏差も同様に計算できます。
data_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0],[5,6]])
# 列ごとの分散を計算 (dim=0)
std_value_dim0 = torch.std(data_2d, dim=0)
print(std_value_dim0)
# 行ごとの標準偏差を計算 (dim=1)
std_value_dim1 = torch.std(data_2d, dim=1)
print(std_value_dim1)
各行の標準偏差を計算することで、行内のデータの広がりが分かります。
6. 最大値と最小値


6.1. 最大値
テンソルの最大値と、その最大値がどの位置にあるのか(インデックス)を取得するには max()メソッドを使います。
tensor = torch.tensor([1, 2,3,4,5 ])
# 最大値とそのインデックス
max_value, max_index = tensor.max(dim=0)
print(max_value)
print(max_index)
6.2. 最小値
テンソルの最小値と、その最小値がどの位置にあるのか(インデックス)を取得するには min()メソッドを使います。
# 最大値とそのインデックス
min_value, min_index = tensor.min(dim=0)
print(min_value)
print(min_index)