PyTorch深度学习总结
第五章 PyTorch中张量(Tensor)统计操作
文章目录
前言
上文介绍了PyTorch中张量(Tensor)的计算操作,本文将介绍张量的统计操作。
一、最值查找
| 函数 | 描述 |
|---|---|
torch.max() |
找出张量中的最大值 |
torch.argmax() |
输出最大值所在位置 |
torch.min() |
找出张量中的最小值 |
torch.argmin() |
输出最小值所在位置 |
torch.sort() |
对一维张量或多维(每个维度单独)进行排序 |
torch.topk(A, k) |
根据指定值k,计算出张量A取值为前k大的值,并显示所在位置 |
torch.kthvalue(A, k) |
根据指定值k,计算出张量A取值为第k小的值,并显示所在位置 |
创建张量:
python# 引入库 import torch # 创建张量A A = torch.arange(2., 8.).reshape(2,3) print(A)输出结果为:tensor(\[2, 3, 4, 5, 6, 7])
测试函数:
pythonprint(A.max()) print(A.argmax()) print(A.min()) print(A.argmin())输出结果为(含注释):
tensor(7.)
tensor(5) # 0-5的最后一位
tensor(2.)
tensor(0) # 0-5的第一位
torch.sort()
创建随机张量B:
python# 创建随机张量B B = torch.randperm(15).reshape(3, 5) # torch.randperm(n)可以生成有n个0-10之间整数组成的张量 print(B)输出结果为:
tensor(
\[13, 9, 1, 2, 0,
4, 14, 12, 3, 7,
5, 6, 8, 11, 10])
对张量B进行排序:
python# 升序输出 print(B.sort()) # 分别输出排序后的值,以及该值在原索引中不同维度的位置(列数)输出结果为:
torch.return_types.sort(
values=tensor(\[ 0, 1, 2, 9, 13,
3, 4, 7, 12, 14,
5, 6, 8, 10, 11]),
indices=tensor(\[4, 2, 3, 1, 0,
3, 0, 4, 2, 1,
0, 1, 2, 4, 3]))
python# 降序输出 print(B.sort(descending=True))输出结果为:
torch.return_types.sort(
values=tensor(\[13, 9, 2, 1, 0,
14, 12, 7, 4, 3,
11, 10, 8, 6, 5]),
indices=tensor(\[0, 1, 3, 2, 4,
1, 2, 4, 0, 3,
3, 4, 2, 1, 0]))
测试函数
torch.topk():
python# 选取每个维度最大和次大的值,及其位置 print(B.topk(2))输出结果为:
torch.return_types.topk(
values=tensor(\[13, 9,
14, 12,
11, 10]),
indices=tensor(\[0, 1,
1, 2,
3, 4]))
python# 选取2-dim维度前2大的值及其位置 print(B) print(B.topk(2, dim=0)) # 每列最大的两个值输出结果为(含注释):
tensor(\[13, 9, 1, 2, 0,
4, 14, 12, 3, 7,
5, 6, 8, 11, 10])
torch.return_types.topk(
values=tensor(\[13, 14, 12, 11, 10,
5, 9, 8, 3, 7]),
indices=tensor(\[0, 1, 1, 2, 2,
2, 0, 2, 1, 1])) # indices表示对应元素的行数
python# 选取2-dim最大和次大的值,及其位置 print(B.topk(2, dim=1)) # 与默认情况相同默认情况输出结果为:
torch.return_types.topk(
values=tensor(\[13, 9,
14, 12,
11, 10]),
indices=tensor(\[0, 1,
1, 2,
3, 4]))
测试函数
torch.kthvalue():
python# 选取每个维度第2小的值及其位置 print(B) print(B.kthvalue(2))输出结果为:
tensor(\[13, 9, 1, 2, 0,
4, 14, 12, 3, 7,
5, 6, 8, 11, 10])
torch.return_types.kthvalue(
values=tensor(1, 4, 6),
indices=tensor(2, 0, 1))
二、特殊值查询
| 函数 | 描述 |
|---|---|
torch.mean(A, dim=0) |
根据指定维度计算均值 |
torch.sum(A, dim=0) |
根据指定维度求和 |
torch.cumsum(A, dim=0) |
根据指定维度计算累加和 |
torch.median(A, dim=0) |
根据指定维度计算中位数 |
torch.cumprod(A, dim=0) |
根据指定维度计算乘积 |
torch.std(A, dim=0) |
根据指定维度计算标准差 |
测试函数(维度0):
pythonprint(A) print(A.mean(dim=0)) print(A.sum(dim=0)) print(A.cumsum(dim=0)) print(A.median(dim=0)) print(A.cumprod(dim=0)) print(A.std(dim=0))输出结果为(含注释):
tensor(\[2., 3., 4.,
5., 6., 7.]) # 张量A
tensor(3.5000, 4.5000, 5.5000) # 每列均值
tensor( 7., 9., 11.) # 每列求和
tensor(\[ 2., 3., 4.,
7., 9., 11.]) # 每列累加求和
torch.return_types.median(
values=tensor(2., 3., 4.),
indices=tensor(0, 0, 0)) # 每列中位数及索引
tensor(\[ 2., 3., 4.,
10., 18., 28.]) # 每列累乘
tensor(2.1213, 2.1213, 2.1213) # 每列标准差
pythonprint(A) print(A.mean(dim=1)) print(A.sum(dim=1)) print(A.cumsum(dim=1)) print(A.median(dim=1)) print(A.cumprod(dim=1)) print(A.std(dim=1))输出结果为(含注释):
tensor(\[2., 3., 4.,
5., 6., 7.]) # 张量A
tensor(3., 6.) # 每行均值
tensor( 9., 18.) # 每行求和
tensor(\[ 2., 5., 9.,
5., 11., 18.]) # 按行逐个累加
torch.return_types.median(
values=tensor(3., 6.),
indices=tensor(1, 1)) # 每行中位数
tensor(\[ 2., 6., 24.,
5., 30., 210.]) # 按行逐个累乘
tensor(1., 1.) # 每行标准差